vue中引入.svg图标,使用iconfont图标库

阿里巴巴的iconfont是一个很好的图标库,海量的素材可以快速满足开发人员日常对图标的诉求,我们采用symbol引用,官方介绍

创建SvgIcon组件

<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>

创建icons文件夹

src跟目录下创建icons文件夹,里面创建svg文件夹和index.js文件


image.png

svg文件夹中用来存放各种扩展的.svg图标。

index.js

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg组件

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

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

main.js中引入

import './icons'

下载插件

cnpm i svg-sprite-loader --save

配置

在build/webpack.base.conf.js文件中,加入

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

并在以下设置中添加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]')
        }
      },

使用

ok,大功告成,这样就可以在.vue页面中直接使用.svg文件了。使用.svg文件的名称,通过icon-class属性来引用。

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

推荐阅读更多精彩内容

  • 前言 本篇文章其实陆陆续续写了快半年,主体部分写好了很久了,但由于种种原因一直没有发布。首先来说说写这篇文章的主要...
    7cd975786ccd阅读 9,909评论 0 11
  • 今天我在看某脑SVG视频和网上查资料时,发现了和某位大佬的写文章的某种巧合(报以微妙的笑容)。因为强迫症,所以我想...
    仁昌居士阅读 10,199评论 0 11
  • 口里苦,心就不那么苦了。 晚饭的时候,母亲做了一盘大大的苦瓜炒蛋。 母亲说:“你从来不吃苦瓜,以前吃个苦瓜就像吃药...
    林修修阅读 2,563评论 0 0
  • 在此之后,我只记得自己做了一个冗长的梦。梦里发生的一切在现实之中都无迹可寻。
    徐非凡阅读 1,111评论 0 0
  • 工作中有没有遇到以下几种情况? 老板:之前那个项目的数据分析发我一下,这新项目要参考之前的做个预估。 同事:哎,你...
    Stacy的职场成长指南阅读 4,804评论 0 19