最近在使用antd-v搞前端,想让国际化切换语言时图标也跟着换。
首先,先去 iconfont.cn 挑选想要的图标,加入购物车,然后下载下来解压。主要使用iconfont.js即可,demo_index.html里有使用方法,iconfont.css也可以看看。把 iconfont.js 放入 src/assets/iconfont/ 目录中,然后在 main.js 中注册自定义图标组件:
import {Icon} from 'ant-design-vue' import iconFont from '@/assets/iconfont/iconfont' // 添加iconfont const iconfont = Icon.createFromIconfontCN({ scriptUrl: iconFont }) Vue.component('icon-font', iconfont)
修改加载国际化图标逻辑:
<div v-if="langAlias === 'CN'"> <icon-font type="icon-zhongwen"/> </div> <div v-else-if="langAlias === 'US'"> <icon-font type="icon-yingwen"/> </div>
如果启动服务报 no-self-assign 错误:可以找到 eslint-recommended.js 将 "no-self-assign": "error", 此行注释掉即可。更方便的方式是在 package.json 里的 eslintConfig 配置规则中加入报错忽略。
// 报错信息如下: ERROR Failed to compile with 1 errors error in ./src/assets/iconfont/iconfont.js Module Error (from ./node_modules/eslint-loader/index.js): ~/thor-frontend/src/assets/iconfont/iconfont.js 1:2123 error 't' is assigned to itself no-self-assign 1 problem (1 error, 0 warnings) // 解决 打开 ~/thor-frontend/node_modules/eslint/conf/eslint-recommended.js 注释此行 → // "no-self-assign": "error", // package.json中配置 "eslintConfig": { "root": true, "env": { "node": true }, "extends": [ "plugin:vue/essential", "eslint:recommended" ], "parserOptions": { "parser": "babel-eslint" }, "rules": { "no-unused-vars":"off", "no-self-assign": "error" } },
直接自定义一个 Iconfont 全局组件,首先将iconfont.js放在src/assets/js目录中,在src/components下新建iconfont文件夹,在里边创建 index.js 文件,内容如下:
import Vue from 'vue' import {Icon} from 'ant-design-vue' import iconFont from '@/assets/js/iconfont' // 添加iconfont const iconfont = Icon.createFromIconfontCN({ scriptUrl: iconFont }) Vue.component('icon-font', iconfont) export default { name: 'Iconfont' }
然后在main.js只需添加如下两行即可,这样看上去更优雅一些。
import Iconfont from '@/components/iconfont' Vue.use(Iconfont)
最终效果如下: