vue使用svg图标(从0开始)
用的element以及antd图标种类都比较少,不够实用,学别人引用svg的图标库
一、引入svg准备
- 安装依赖
npm install svg-sprite-loader --save-dev - 配置build文件夹中的webpack.base.conf.js
添加1:exclude: [resolve('src/icons')],
添加2:
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
},
位置:

- 在src/components下新建文件夹SvgIcon及文件index.vue,

index.vue中内容如下
<template>
<svg :class="svgClass" aria-hidden="true" v-on="$listeners">
<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: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
- 在src下新建icons文件夹,及icons文件夹下svg文件夹(用来存放svg图标)、index.js文件、svgo.yml文件

index.js文件内容如下
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component
// register globally
Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)
svgo.yml文件内容
# replace default config
# multipass: true
# full: true
plugins:
# - name
#
# or:
# - name: false
# - name: true
#
# or:
# - name:
# param1: 1
# param2: 2
- removeAttrs:
attrs:
- 'fill'
- 'fill-rule'
- 在main.js中引入svg
import './icons/index'
二、使用svg
搜索阿里云提供的iconfont官网
使用时可以选用下载svg图片以及svg码形式
- 点击官网图标的小箭头下载,
选择svg图片格式的放置图片在项目中

- 我选用的是svg码的形式

然后在前面建的icon/svg文件夹里建这个图标的*.svg文件,把复制的svg粘贴进去

- 在需要的地方直接引用
<svg-icon icon-class="user" />
!!!以为到这里就结束了是不是,我也以为
结果死活都不会显示这个图标,已经翻帖子翻到烦了。
最后发现又是该死的版本问题
npm i svg-sprite-loader@3.8.0 --save-dev
换为这个版本后再重新下载依赖npm install开启项目npm run dev就好了
终于搞好了 舒服了
更新~
svg的图标大小及颜色修改
- 在下载时可以先选一下颜色和大小

- 在下载引入项目后还想更改的话,可以在对应的配置文件中设置


关于某一个图标单独的颜色可以在svg码那里的fill修改
