原由:
1.官方图标不够使用,或者某些图标不大合适。
2.由于后台管理系统返回的菜单图标是字符串的
官方方法自定义 svg 图标
//官方教程
//config/router.config.js 中
import { bxAnaalyse } from '@/core/icons'
.... asyncTouterMap = {
....meta: { .... icon: bxAnaalyse ......
}//自定义图标在 core/icons 中 import 和 export
解决方法:
1、原由1:需要进行图标扩展,上 iconfont 下载需要的 svg 图标,放入 assets/icons 中,在 core/icons.js import 和 export,在需要的地方 import 使用;
2、原由2:在使用的时候不可能全部都先 import {xxx} from ...,然后写个 switch 从字符串转成对象,所以这个时候采用 import * as xx from '@/core/icons',然后使用 xx['icon'] 进行使用
// api 返回左侧菜单数据,内包含 icon,类似如下:
// {"icon": "svg-shouyi", Name: '收益管理'......}
// 在生成左侧路由时类似下方代码
import * as icon from '@/core/icons'......
return currentrouter = {
...
meta: {icon: icon['Icon']
....
}
}
......
还有一种采用 vue-element-admin 的 icons 方式 require
在侧边栏使用自定义图标时,点击菜单会发现图标颜色不会更改。以下有三种方法可以改变颜色。
1、需要找到对应的 svg,然后删除 fill 或者改成 fill="#......",一个 svg 可能有多个 fill;
2、在 iconfont 下载图标的时候,使用添加到项目,点击批量操作 —> 批量去色;
3、使用 css3 的滤镜 filter 中得到属性 frop-shadow 改变 svg 的颜色;
![]()
.img {position: relatives;left: -80px;filter: drop-shadow(#fff 80px 0); // 投影颜色
}// svg {
// fill: currentColor; // currentColor 为 css 变量,自动读取当前元素颜色
// }
上一篇:proxy实现链式编程