vue引用svg sprite技术

1、创建SvgIcon组件,在vue项目的components/SvgIcon目录下创建index.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: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>

2、创建icons文件夹,src根目录下创建icons文件夹,里面创建svg文件夹和index.js文件,index.js代码如下:

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component

// register globally
Vue.component('svg-icon', SvgIcon)

const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

3、main.js中引入

import './icons'

4、下载插件

npm i svg-sprite-loader --save

5、在build/webpack.base.conf.js文件中,加入以下代码:

{
        test: /\.svg$/,
        loader: 'svg-sprite-loader',
        include: [resolve('src/icons')],
        options: {
          symbolId: 'icon-[name]'
        }
      }

6、在build/webpack.base.conf.js文件中原代码中加入exclude: [resolve('src/icons')],代码。原代码如下:

{
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        exclude: [resolve('src/icons')],
        options: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },

7、在vue页面使用。user对应src/icons/svg目录下的图标文件名称

<svg-icon icon-class="user" />
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,117评论 0 2
  • 终于给搞定了!下面来个总结吧: 1、先在package.json中引入,再执行安装,应注意是项目使用 vue in...
    Zola_4f36阅读 3,183评论 1 1
  • 原文http://www.cnblogs.com/libin-1/p/6596810.html 版本号 vue-c...
    tengrl阅读 3,715评论 0 0
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,979评论 1 4
  • 本文基于工作项目开发,做的整理笔记前段时间公司有的小伙伴刚开始学习vue,就直接着手用在新项目上,以项目实战步步为...
    SeasonDe阅读 7,300评论 16 39