Vue项目中优雅的使用svg图表

Svg的使用

第一步肯定要下载安装

npm install svg-sprite-loader --save-dev

然后在src下面新建文件夹
文件夹
svg里面放的是使用阿里矢量图标库里的下载图标文件
附图标网址:https://www.iconfont.cn/home/index?spm=a313x.7781069.1998910419.2
下载文件后复制粘贴到svg文件下
在这里插入图片描述
index.js中文件代码如下:不用纠结直接复制

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg组件
//挂载到全局
Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

在vue.config.js文件中配置如下:
在这里插入图片描述
代码附上

chainWebpack: config => {
      config.module
        .rule('svg')
        .exclude.add(resolve('src/icons'))
        .end();

      config.module
        .rule('icons')
        .test(/\.svg$/)
        .include.add(resolve('src/icons'))
        .end()
        .use('svg-sprite-loader')
        .loader('svg-sprite-loader')
        .options({
          symbolId: 'icon-[name]'  
        })
        .end();

      config.module
        .rule('images')
        .test(/\.(png|jpg|gif)$/)
        .use('url-loader')
        .loader('url-loader')
        .options({
            name: 'images/[name].[ext]',
            limit: 1000
        })
        .end();
    }

然后components文件下新建SvgIcon.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>

在main.js中导入一下

import ‘./icons’

任意位置使用:

 <svg-icon icon-class="冰箱"></svg-icon>

注意:icon-class的名字是根据svg下面的文件名字来写的,不可以自己随便写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值