每次使用一次插件,总会遇到各种各样的坑,npm上面的文档说明老旧,网络上的文章总是字数满满,内在无比空虚,各种复制粘贴。我这个是使用vuecli4版本中使用svg-sprite-loader,废话不都说,一起来看看满满的干货
首先看下效果,避免方法的不正确性
1、先从阿里图标库中下载svg图标
说明:svg图标一定要去色,不然,调节的图标颜色的时候,是整体效果


3、再components中新建组件svg_icon.vue
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName"></use>
</svg>
</template>
<script>
export default {
name: 'svg-icon',
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>
4、再 assets/svg_icon中新建index.js
import Vue from 'vue'
import svgIcon from '@/components/svgIcon' // 引入刚才新建的svg组件
Vue.component('svg-icon', svgIcon) // 全局组件
const req = require.context('./svg', false, /\.svg$/) // ./svg,就是我们放svg图标的文件名
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)
5、再vue.config.js中配置svg-sprite-loader
chainWebpack: config => {
config.module
.rule('svg')
.exclude.add(resolve('src/assets/svg_icon')) // index.js 的路径
.end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/assets/svg_icon')) // index.js 的路径
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
},
6、再main.js中引用
import '@/assets/svg_icon'
7、vue文件中使用
<svg-icon icon-class="notification"></svg-icon>
说明:notification为下载的svg文件名称
总结,这个方法我已经测试过了,肯定有效无意。写文章不易,小伙伴们用的好的话,请点个赞。如果,大家还有什么问题,可以在评论区中提出,我们一起讨论、进步!
网友评论