VUE使用svg字体图标

vue使用字体图标svg,在src下新建目录icons文件,再在icons文件下新建svg文件,在阿里ico中将字体的svg图片下载下来即可:例如from.svg

在组件中新建icon-svg.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 scoped lang="stylus">
  .svg-icon {
    width 1.1em
    height 1.1em
    vertical-align -.2em
    fill currentColor
    overflow hidden
  }
</style>

在iicon的js中使用该组件icon-svg.vue组件

import Vue from 'vue'
import IconSvg from '@/components/icon-svg'
/*
require.context("./test", false, /.test.js$/);这行代码就会去 test 文件夹(不包含子目录)
下面的找所有文件名以 .test.js 结尾的文件能被 require 的文件。更直白的说就是 我们可以通过正则匹配引入相应的文件模块。
require.context有三个参数:
directory:说明需要检索的目录
useSubdirectories:是否检索子目录
regExp: 匹配文件的正则表达式
 */
//全局注册iconsvg组件
Vue.component('svg-icon', IconSvg)

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

main.js引入全局图标(后面的index.js可以省略)

// 全局图标
import './icons/index.js'

全局组件使用方式

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

SVG安装

npm 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')],

  

相关学习链接:https://www.jianshu.com/p/5b2c7757fc19

posted @ 2019-09-19 15:04  王静文  阅读(626)  评论(0)    收藏  举报