美文网首页
在Vue中使用svg

在Vue中使用svg

作者: 取个帅气的名字真好 | 来源:发表于2019-05-10 20:50 被阅读0次

    1、安装svg-sprite-loader

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

    2、/src/components 创建 SvgIcon.vue

    <template>
      <svg :class="svgClass" aria-hidden="true">
        <use :xlink:href="iconName" />
      </svg>
    </template>
    
    <script>
    /**
     * 使用栗子
     *   <svg-icon icon-class="set"></svg-icon>
     */
      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>
    
    目录结构

    3、src/icons/index.js

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

    4、src/icons/svg 放svg即可(最好使用iconfont上的svg)

    5、vue-config.js配置

    const path = require('path')
    function resolve (dir) {
      return path.join(__dirname, './', dir)
    }
    
    module.exports = {
      configureWebpack: config => {
    },
      chainWebpack: config => {
        // svg 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/icons'))
        config.module
          .rule('images')
          .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
      },
    }
    }
    
    

    6、使用
    index.vue

    <svg-icon icon-class="eye"></svg-icon>
    

    ps: 修改svg颜色可使用color:red;或者fill:red;

    本文参考花裤衩

    相关文章

      网友评论

          本文标题:在Vue中使用svg

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