1.npm导包
npm i svg- sprite- loader -- save
2.创建目录放入svg文件,创建SvgIcon.js
3.SvgIcon.js
const req = require. context ( './svg' , false , / \.svg$ / )
const requireAll = requireContext => requireContext. keys ( ) . map ( requireContext)
requireAll ( req)
4.vue.config.js文件中配置
const path = require ( 'path' ) ;
module. exports = {
chainWebpack ( config ) {
config. module
. rule ( 'svg' )
. exclude. add ( path. resolve ( __dirname, 'src/icons' ) )
. end ( )
config. module
. rule ( 'icons' )
. test ( / \.svg$ / )
. include. add ( path. resolve ( __dirname, 'src/icons' ) )
. end ( )
. use ( 'svg-sprite-loader' )
. loader ( 'svg-sprite-loader' )
. options ( {
symbolId : 'icon-[name]'
} )
. end ( )
}
}
5.在src/compoments/SvgIcon下创建SvgIcon.vue
< 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: 1 em;
height: 1 em;
vertical- align: - 0.15 em;
fill: currentColor;
overflow: hidden;
}
< / style>
6.main.js
import '. /icons/ SvgIcon . js'
import SvgIcon from '. /components/ SvgIcon / SvgIcon . vue'
Vue . component ( 'svg- icon', SvgIcon )
7.使用方法
< template>
< div>
< svg- icon class - name= "xxxx" icon- class = "xxxx" / >
< / div>
< / template>
< script>
export default {
name: 'test' ,
}
< / script>
< style>
. star- icon {
font- size: 30 px;
color: gold;
}
< / style>
8.红框里的就是svg-icon效果