一、什么是 Vue-svg-loader
Vue-svg-loader 是一个通过 webpack 加载和解析 SVG 文件,并将其转换为 Vue 组件的 loader。它可以在项目中更方便地使用 SVG 图标、动态修改 SVG 图标颜色、以及处理网络请求错误等情况。
二、Vue-svg-loader 的引入
在 webpack 配置文件中,通过使用 vue-svg-loader 插件来引入该工具:
module: {
rules: [
{
test: /\.vue$/,
use: 'vue-loader'
},
{
test: /\.svg$/,
use: [
{
loader: 'vue-svg-loader',
}
]
}
]
}
配置完成后就可以在 vue 单文件组件(*.vue)和 HTML 文件中使用 SVG 了。
三、SVG 图标文件的使用
1、在 vue 单文件组件中使用
在单文件组件中直接 import SVG 文件作为组件使用:
<template>
<div>
<MyIcon class="icon" />
</div>
</template>
<script>
import MyIcon from '../assets/icon.svg';
export default {
components: {
MyIcon
}
}
</script>
2、在 HTML 文件中使用
在 HTML 文件中使用 <img>
标签将 SVG 文件引入,然后通过 CSS 样式来控制颜色、大小等属性:
<img src="assets/icon.svg" class="icon" style="color: red; width: 20px; height: 20px;">
四、Vue-svg-loader 的图标颜色处理
一个常见的需求是更改 SVG 图标的颜色。在 Vue-svg-loader 中,可以通过使用 fill="#000000"
来为 SVG 图标添加对应的颜色。这里的 #000000
即为十六进制的颜色值。
当然,如果我们希望更改图标颜色时不需要手动修改 SVG 文件,可以使用 Vue-svg-loader 通过 props 动态修改。
<template>
<div>
<MyIcon class="icon" :style="{ fill: iconColor }" />
</div>
</template>
<script>
import MyIcon from '../assets/icon.svg';
export default {
components: {
MyIcon
},
data() {
return {
iconColor: '#000000'
}
}
}
</script>
五、Vue-svg-loader 的错误处理
当 SVG 文件路径错误或文件不存在时,会导致编译报错。为了解决这个问题,Vue-svg-loader 提供了解析器,可以返回空 SVG 组件并显示警告消息。
即在 webpack 配置文件中添加如下配置:
module: {
rules: [
{
test: /\.svg$/,
use: [
{
loader: 'vue-svg-loader',
options: {
svgo: {
plugins: [
{ removeTitle: false },
{ convertPathData: false }
]
}
}
}
]
}
]
}
添加配置后,当 SVG 文件不存在或路径错误时,会产生以下效果:
<div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" height="1em" width="1em"
aria-hidden="true" focusable="false">
<path d="M0 0h0v0h0z" fill="none"/>
</svg>
<!-- WARNING: The SVG asset "/assets/logo.svg" is missing. -->
</div>