在src/components/
下创建SvgIcon
组件
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
| <template> <svg :class="svgClass" aria-hidden="true"> <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>
|
在src/
下创建一个icons
目录,目录结构如下:
index.js
文件内容:
1 2 3
| const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context('./svg', false, /\.svg$/) requireAll(req)
|
在main.js
中引入
修改默认的loader
:
vue-cli3
中的vue.config.js
配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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() },
|
如何使用?
- 把
.svg
文件放到src/icons/svg
的目录下;
- 点击
svg
查看源码,修改fill
属性, fill="currentColor"
,或者fill=""
,如果无此属性,就不用管,这样做是可以让外部控制icon的颜色,或随父元素的color;
- 注意
svg
命名和SvgIcon
命名一致,看一下最终使用:
1
| <svg-icon icon-class="go-back"></svg-icon>
|
参考链接: