zoukankan      html  css  js  c++  java
  • 如何在vue中使用svg

    1、安装依赖

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

    2、在config文件中配置

    
    
       const path = require('path');
      
      function resolve(dir) {
        return path.join(__dirname, dir)
      }



    chainWebpack(config) {
    // set svg-sprite-loader 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() }

    3、在src/components下新建文件夹及文件SvgIcon/index.vue,index.vue中内容如下

    index.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 {
         1em;
        height: 1em;
        vertical-align: -0.15em;
        fill: currentColor;
        overflow: hidden;
      }
    </style>

    4、在src下新建icons文件夹,及icons文件夹下svg文件夹、index.js文件, index.js文件内容如下

     

    其中index.js代码如下:

    import Vue from 'vue'
    import SvgIcon from '@/components/SvgIcon'// svg组件
     
    // register globally
    Vue.component('svg-icon', SvgIcon)
     
    const req = require.context('./svg', false, /.svg$/)
    const requireAll = requireContext => requireContext.keys().map(requireContext)
    requireAll(req)

    5、在main.js中引入

    import '@/icons' // icon

    6、在项目中使用

     在 阿里icon适量图库随便下载个svg格式的图,

    在svg文件夹下,创建一个test.svg文件,将复制下来的svg代码贴进去

    在项目中使用

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

    效果:

    vue-cli2的项目中如何引入

    同样的上面的文件引入方式还是一样的:一样需要安装

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

    在webpack.base.conf.js中加上:

    rules中:

               {
                    test: /.svg$/,
                    loader: 'svg-sprite-loader',
                    include: [resolve('src/icons')],
                    options: {
                      symbolId: 'icon-[name]' // name代表图标的名字
                    }
                }

    注意:由于vue-cli默认情况下会使用 url-loader 对svg进行处理(如下代码),会将它放在/img 目录下,所以这时候我们引入svg-sprite-loader 会引发一些冲突。我们可以使用exclude: [resolve('src/icons')],让url-loader只处理除此文件夹之外的svg。

    {
        test: /.(png|jpe?g|gif|svg)(?.*)?$/,
        loader: 'url-loader',
        exclude: [resolve('src/icons')], // 使用exclude排除src/icons,让url-loader只处理除此文件夹之外的svg
        options: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
    }

    然后,就可以愉快在vue-cli2搭建的项目中使用svg了,使用方式和上诉相同

  • 相关阅读:
    使用openssl实现ECDSA签名以及验证功能(附完整测试源码)
    【转载】浅谈Linux内存管理机制
    【转载】Abstract Factory Step by Step --- 抽象工厂
    【转载】动态规划:从新手到专家
    Windows Container 和 Docker:你需要知道的5件事
    十年
    Docker,容器,虚拟机和红烧肉
    新的用户故事待办列表就是一副地图
    MarkDown/reST 文档发布流水线
    docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道
  • 原文地址:https://www.cnblogs.com/fqh123/p/11233679.html
Copyright © 2011-2022 走看看