Vue中使用SVG封裝成SVG組件

一、在vue腳手架生成的文件夾下的src/components創(chuàng)建一個(gè)Svg

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

<script type="text/ecmascript-6">
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>
.svg-icon {
      width: 1em;
      height: 1em;
      vertical-align: -0.15em;
      fill: currentColor;
      overflow: hidden;
  }
</style>

二、使用和安裝svg-sprite

  • 這里使用webpack loader中的一個(gè)svg-sprite-loader,可以將多個(gè)svg打包成svg-spite

1、安裝

npm install svg-sprire-loader --save-dev

2、配置 build/webpack.base.conf.js

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

四、自動(dòng)導(dǎo)入

  • 自動(dòng)導(dǎo)入需要用到webpack的require context
// require.context的簡(jiǎn)單介紹
require.context("./file", false, /.file.js$/);
這行代碼就會(huì)去 file 文件夾(不包含子目錄)下面的找所有文件名以 .file.js 結(jié)尾的文件能被 require 的文件。就是說可以通過正則匹配引入相應(yīng)的文件模塊。

// require.context有三個(gè)參數(shù):
directory:說明需要檢索的目錄
useSubdirectories:是否檢索子目錄
regExp: 匹配文件的正則表達(dá)式
  • 在src/icons/index.js使用require context
import Vue from 'vue'
import SvgIcon from '../components/SvgIcon.vue'

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'

六、在src/icons/svg下面的各個(gè)文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 webpack介紹和使用 一、webpack介紹 1、由來 ...
    it筱竹閱讀 11,487評(píng)論 0 21
  • 目錄 iconfont的三種使用方式及其優(yōu)缺點(diǎn) 封裝svg組件 svg雪碧圖 自動(dòng)導(dǎo)入svg圖標(biāo) 封裝svg組件 ...
    胡儒清閱讀 15,464評(píng)論 0 8
  • 終于給搞定了!下面來個(gè)總結(jié)吧: 1、先在package.json中引入,再執(zhí)行安裝,應(yīng)注意是項(xiàng)目使用 vue in...
    Zola_4f36閱讀 3,254評(píng)論 1 1
  • 前言 本篇文章其實(shí)陸陸續(xù)續(xù)寫了快半年,主體部分寫好了很久了,但由于種種原因一直沒有發(fā)布。首先來說說寫這篇文章的主要...
    7cd975786ccd閱讀 4,572評(píng)論 0 11
  • 這學(xué)期基本上沒有課了,所以想著找份工作來充實(shí)一下自己,在這個(gè)過程中也遇到了各種情況,于是一直在糾結(jié)自己要作出怎樣的...
    似水流年1993閱讀 204評(píng)論 0 1

友情鏈接更多精彩內(nèi)容