vue.config.js
chainWebpack(config) {
// 配置svg svg雪碧图
config.module
.rule('svg')
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
})
}
svg组件
/components/my-svg/index
<template>
<svg class="mw-svg" aria-hidden="true">
<use :xlink:href="iconName"></use>
</svg>
</template>
<script>
import { defineComponent, computed } from 'vue'
export default defineComponent({
name: 'my-svg',
props: {
name: {
type: String,
default: ''
}
},
setup(props) {
const iconName = computed(() => {
return `#${props.name}`
})
return {
iconName
}
}
})
</script>
<style lang="scss" scoped>
.mw-svg {
width: 1.4em;
height: 1.4em;
fill: currentColor;
overflow: hidden;
line-height: 1em;
display: inline-block;
}
</style>
注册组件
/plugin/my-svg.ts
import mySvg from '@/components/my-svg/index.vue'
// assets/icons下面的svg图标
export default (app: any) => {
app.component('my-svg', mySvg)
}
const requireAll = (requireContext: any) => requireContext.keys().map(requireContext)
const req = require.context('@/assets/icons', false, /\.svg$/) //svg图标都放/src/assets/icons目录
requireAll(req)
main.ts
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import mySvg from './plugin/my-svg'
// 创建App实例
const app = createApp(App)
// 调用
mySvg(app)
app.use(store).use(router).mount('#app')
使用
<my-svg name="bill"></my-svg>
看完的朋友可以动动手点个赞再走哦,你们的支持是对我最大的鼓励!!!