Vue例子:
1.组件代码
components/svgIcon/index.vue
<template> <svg :width="size" :height="size" :style="{fill: iconColor}"> <use :xlink:href="iconName"></use> </svg> </template> <script> export default { name: ‘icon-svg‘, props: { iconClass: { type: String, required: true }, size: { type: [Number, String], default: 32 }, iconColor: { type: String, default: ‘currentColor‘ } }, computed: { iconName() { return `#icon-${this.iconClass}` } } } </script>
2.批量引入svg图片
components/svgIcon/index.js
// requires and returns all modules that match const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context(‘@/assets/icons‘, false, /\.svg$/) // import all svg requireAll(req)
main.js
import ‘@/components/svgIcon/index.js‘
3.使用svg-sprite
如果不知道 svg-sprite 是什么,可以参考大神张鑫旭的文章:未来必热:SVG Sprite技术介绍
- 页面代码清爽
- 可使用 ID 随处重复调用
- 每个 SVG 图标都可以更改大小颜色
安装:
npm install svg-sprite-loader --save-dev
使用:vue.config.js
chainWebpack: config => { config.module.rules.delete("svg"); //重点:删除默认配置中处理svg, //const svgRule = config.module.rule(‘svg‘) //svgRule.uses.clear() config.module .rule(‘svg-sprite-loader‘) .test(/\.svg$/) .include .add(resolve(‘src/icons‘)) //处理svg目录 .end() .use(‘svg-sprite-loader‘) .loader(‘svg-sprite-loader‘) .options({ symbolId: ‘icon-[name]‘ }) }
记录进步。
https://juejin.cn/post/6844903695478439949
https://juejin.cn/post/6844903517564436493