美文网首页
【vue】vue3中使用svg切图

【vue】vue3中使用svg切图

作者: 胖胖爱吃鱼啊 | 来源:发表于2021-01-06 19:58 被阅读0次
    一、安装插件
    npm install svg-sprite-loader --save-dev
    
    二、封装一个组件

    在componemts里新建一个文件svgIcon.vue

    <template>
      <svg :class="svgClass" aria-hidden="true">
        <use :xlink:href="iconName"></use>
      </svg>
    </template>
    
    <script>
    export default {
      name: 'svg-icon',
      props: {
        iconClass: {
          type: String,
          required: true
        },
        className: {
          type: String
        }
      },
      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: 100px;
      height: 100px;
      vertical-align: -0.15em;
      fill: currentColor;
      overflow: hidden;
    }
    </style>
    
    
    三、新建一个文件夹

    1.在assets下新建icons文件夹,来放你的svg文件,新建index.js


    目录

    2.index.js

    import Vue from 'vue'
    import SvgIcon from '@/components/svgIcon' // svg组件
    
    // 注册到全局
    Vue.component('svg-icon', SvgIcon)
    
    const requireAll = requireContext => requireContext.keys().map(requireContext)
    const req = require.context('./svg', false, /\.svg$/)
    requireAll(req)
    
    
    四、在vue.config.js添加
    const path = require('path')
    
    function resolve(dir) {
      return path.join(__dirname, '.', dir)
    }
    
    module.exports = {
      chainWebpack: config => {
        config.module.rules.delete("svg"); //重点:删除默认配置中处理svg,
        config.module
          .rule('svg-sprite-loader')
          .test(/\.svg$/)
          .include
          .add(resolve('src/assets/icons')) //处理svg目录(根据你建的文件路径)
          .end()
          .use('svg-sprite-loader')
          .loader('svg-sprite-loader')
          .options({
            symbolId: 'icon-[name]'
          })
      },
    }
    
    
    五、引入

    在main.js里引入(根据你建的文件引入)
    import './assets/icons'

    六、页面使用
    <svg-icon icon-class="menu_logo" />  //// icon-class:是svg的文件名
    

    相关文章

      网友评论

          本文标题:【vue】vue3中使用svg切图

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