vue使用svg图标(从0开始)

用的element以及antd图标种类都比较少,不够实用,学别人引用svg的图标库

一、引入svg准备

  1. 安装依赖npm install svg-sprite-loader --save-dev
  2. 配置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]'
        }
      },

位置:
在这里插入图片描述

  1. 在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>
  1. 在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'
  1. 在main.js中引入svg
import './icons/index'

二、使用svg

搜索阿里云提供的iconfont官网
使用时可以选用下载svg图片以及svg码形式

  1. 点击官网图标的小箭头下载,
    选择svg图片格式的放置图片在项目中
    在这里插入图片描述
  2. 我选用的是svg码的形式
    在这里插入图片描述
    然后在前面建的icon/svg文件夹里建这个图标的*.svg文件,把复制的svg粘贴进去
    在这里插入图片描述
  3. 在需要的地方直接引用<svg-icon icon-class="user" />

!!!以为到这里就结束了是不是,我也以为
结果死活都不会显示这个图标,已经翻帖子翻到烦了。
最后发现又是该死的版本问题
npm i svg-sprite-loader@3.8.0 --save-dev
换为这个版本后再重新下载依赖npm install开启项目npm run dev就好了

终于搞好了 舒服了

更新~
svg的图标大小及颜色修改

  1. 在下载时可以先选一下颜色和大小
    在这里插入图片描述
  2. 在下载引入项目后还想更改的话,可以在对应的配置文件中设置
    在这里插入图片描述在这里插入图片描述
    关于某一个图标单独的颜色可以在svg码那里的fill修改
    在这里插入图片描述