美文网首页
vue使用svg来做为icon

vue使用svg来做为icon

作者: 流眼泪的鱼I | 来源:发表于2019-05-08 20:16 被阅读0次

    vue如何使用svg来做为系统图标

    1.在 src/components/ 下创建 SvgIcon 组件

    <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>
    
    

    2.修改默认的svg-loader

    'use strict'
    const path = require('path')
    
    function resolve (dir) {
      return path.join(__dirname, './', dir)
    }
    module.exports = {
      chainWebpack: config => {
        config.plugin('define').tap(args => {
          const argv = process.argv
          const icourt = argv[argv.indexOf('--icourt-mode') + 1]
          args[0]['process.env'].MODE = `"${icourt}"`
          return args
        })
        // svg rule loader
        const svgRule = config.module.rule('svg') // 找到svg-loader
        svgRule.uses.clear() // 清除已有的loader, 如果不这样做会添加在此loader之后
        svgRule.exclude.add(/node_modules/) // 正则匹配排除node_modules目录
        svgRule // 添加svg新的loader处理
          .test(/\.svg$/)
          .use('svg-sprite-loader')
          .loader('svg-sprite-loader')
          .options({
            symbolId: 'icon-[name]'
          })
          // 修改images loader 添加svg处理
        const imagesRule = config.module.rule('images')
        imagesRule.exclude.add(resolve('src/assets/icons'))
        config.module
          .rule('images')
          .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
      },
    

    3.安装 svg-sprite-loader

    npm install svg-sprite-loader --save
    

    4.在assets目录先创建svg文件夹把svg导入
    创建index.js

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

    相关文章

      网友评论

          本文标题:vue使用svg来做为icon

          本文链接:https://www.haomeiwen.com/subject/zxtboqtx.html