Vue中优雅的使用 icon字体图标

一,components路径下创建一个IconSvg.vue组件,内容如下:

<template>
  <svg class="svg-icon" aria-hidden="true">
    <use :xlink:href="iconName"></use>
  </svg>
</template>

<script>
  export default {
    name: 'icon-svg',
    props: {
      iconClass: {
        type: String,
        required: true
      }
    },
    computed: {
      iconName() {
        return `#icon-${this.iconClass}`
      }
    }
  }
</script>

<style>
  .svg-icon {
    width: 6em;
    height: 6em;
    vertical-align: -0.15em;
    fill: blue;
    overflow: hidden;
  }
</style>

二,在assets路径下创建icons文件夹,里面创建svg文件夹和index.js,把svg文件导入svg文件夹下

index.js里面的内容:

import Vue from 'vue'
import IconSvg from '@/components/IconSvg'

Vue.component('icon-svg',IconSvg)


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

三,在入口文件main.js中导入index.js

import '../src/assets/icons/index'

四,安装svg-sprite-loader

npm install svg-sprite-loader -D

配置:webpack.base.conf.js,内容如下;

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

五,在组件中使用,

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

更多的配置可以参考:https://juejin.im/post/59bb864b5188257e7a427c09#heading-10

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值