美文网首页
Vue使用SVG图标

Vue使用SVG图标

作者: 莫伊剑客 | 来源:发表于2020-12-29 15:08 被阅读0次

    一、安装依赖

    npm i svg-sprite-loader -D
    

    二、修改规则和新增规则,vue.config.js

    // resolve定义一个绝对路径获取函数 
    const path = require('path')
    function resolve (dir) { return path.join(__dirname, dir) }
    module.exports = {
      chainWebpack (config) {
        // 配置svg规则排除icons目录中svg文件处理 
        // 目标给svg规则增加一个排除选项
        exclude: ['path/to/icon']
        config.module.rule("svg")
          .exclude.add(resolve("src/icons"))
        // 新增icons规则,设置svg-sprite-loader处理icons目录中的svg 
        config.module.rule('icons').test(/\.svg$/)
          .include.add(resolve('./src/icons'))
          .end()
          .use('svg-sprite-loader')
          .loader('svg-sprite-loader')
          .options({ symbolId: 'icon-[name]' })
      }
    }
    

    三、使用

    <template>
      <svg>
        <use xlink:href="#icon-wx" />
      </svg>
    </template>
    <script>
    import "@/icons/svg/wx.svg";
    export default {};
    </script>
    

    四、自动导入

    // context第一个参数为图标目录
    const req = require.context('./svg', false, /\.svg$/) 
    req.keys().map(req);
    

    五、组件化

    <template>
      <svg :class="svgClass" 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 lang="scss" scoped>
    .svg-icon {
      width: 1em;
      height: 1em;
      vertical-align: -0.15em;
      fill:currentColor;
      overflow: hidden;
    }
    </style>
    
    

    六、使用 在main中全局注册svg-icon组件

    import svgIcon from '@/component/svgIcon'
    vue.component('svg-icon',svgIcon)
    

    相关文章

      网友评论

          本文标题:Vue使用SVG图标

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