如果按一般方法引入SVG,打印出来的只是字符串路径。
<script lang="ts">
import x from "@/assets/icons/label.svg"
console.log(x) //字符串路径
</script>
需要按照以下步骤:
使用svg-sprite-loader引入icon
- 安装svg-sprite-loader
yarn add svg-sprite-loader -D
//作用是将svg变成symbol标签,再将symbol标签放到svg标签里面。
- 添加配置vue.config.js文件
const path = require('path')
module.exports = {
lintOnSave: false,
chainWebpack: config => {
const dir = path.resolve(__dirname, 'src/assets/icons')
config.module
.rule('svg-sprite')
.test(/\.svg$/)
.include.add(dir).end()
.use('svg-sprite-loader').loader('svg-sprite-loader').options({extract: false}).end()
.use('svgo-loader').loader('svgo-loader')
.tap(options => ({...options, plugins: [{removeAttrs: {attrs: 'fill'}}]}))
.end()
config.plugin('svg-sprite').use(require('svg-sprite-loader/plugin'), [{plainSprite: true}])
config.module.rule('svg').exclude.add(dir)
}
}
这时如果重新打印会发现打印出来的结果不是字符串路径。
- 将svg标签和use标签引入svg即可。
<template>
<div>
<svg>
<use xlink:href="#xxx"/>
</svg>
</div>
</template>