安装
首先安装 svg-sprite-loader
:
1
| npm install --save-dev svg-sprite-loader
|
新建目录及文件
在 src
目录下新建 icons
文件夹,并在里面创建 index.js
文件和 svg
目录:
我们可以把所需要的 svg 文件放到此目录下:src/icons/svg/
。
新建组件
再在 src/components
目录下新建 SvgIcon.vue
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <template> <svg :class="svgClass" aria-hidden="true" v-on="$listeners" > <use :xlink:href="iconName" /> </svg> </template>
<script> export default { name: "SvgIcon", props: { iconClass: { type: String, required: true, }, className: { type: String, default: "", }, }, computed: { iconName() { return `#icon-${this.iconClass}`; }, svgClass() { if (this.className) { return "svg-icon " + this.className; } else { return "svg-icon"; } }, }, }; </script>
<style scoped> .svg-icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } </style>
|
编辑index.js文件
我们再编辑 src/icons/index.js
文件,内容如下:
1 2 3 4 5 6 7 8
| import Vue from 'vue' import SvgIcon from './../components/SvgIcon.vue' Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/); req.keys().map(req);
|
并在 src/main.js
文件中导入:
配置
编辑 vue.config.js
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| const path = require("path");
function resolve(dir) { return path.join(__dirname, dir); }
module.exports = { chainWebpack: config => { config.module .rule("svg") .exclude.add(resolve("src/icons")) .end();
config.module .rule("icons") .test(/\.svg$/) .include.add(resolve("src/icons")) .end() .use("svg-sprite-loader") .loader("svg-sprite-loader") .options({ symbolId: "icon-[name]" }) .end(); }, }
|
使用
1
| <svg-icon icon-class="xxx"></svg-icon>
|
其中 xxx 是 src/icons/svg/xxx.svg
的文件名。