溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

svg-sprite-loader如何在VUE-cli3中使用

發(fā)布時間:2021-03-26 15:30:07 來源:億速云 閱讀:293 作者:Leah 欄目:web開發(fā)

這期內容當中小編將會給大家?guī)碛嘘P svg-sprite-loader如何在VUE-cli3中使用,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

svg-sprite-loader 的插件,用來根據(jù)導入的 svg 文件自動生成 symbol 標簽并插入 html,接下來就可以在模版中方便地使用 svg-sprite 技術了。

使用 svg-sprite 的好處

  • 頁面代碼清爽

  • 可使用 ID 隨處重復調用

  • 每個 SVG 圖標都可以更改大小顏色

安裝插件

npm install svg-sprite-loader --save-dev

webpack 配置,在Vue.config.js加入處理 svg 的 loader:

const path = require('path')
function resolve(dir) {
 return path.join(__dirname, '.', dir)
}
module.exports = {
 chainWebpack: config => {
  config.module.rules.delete("svg"); //重點:刪除默認配置中處理svg,
  //const svgRule = config.module.rule('svg')
  //svgRule.uses.clear()
  config.module
   .rule('svg-sprite-loader')
   .test(/\.svg$/)
   .include
   .add(resolve('src/icons')) //處理svg目錄
   .end()
   .use('svg-sprite-loader')
   .loader('svg-sprite-loader')
   .options({
    symbolId: 'icon-[name]'
   })
 },
 configureWebpack: () => ({
  // resolve: {
  //  alias: require('./alias.config').webpack
  // }
  // module: {
  //  rules: [{
  //   test: /\.svg$/,
  //   use: [{
  //    loader: "svg-sprite-loader",
  //    options: {
  //     symbolId: 'icon-[name]'
  //    }
  //   }]
  //  }]
  // }
 })
}

這時候發(fā)現(xiàn)還是不行啊, body 中并沒有看到 symbol 標簽。

svg-sprite-loader如何在VUE-cli3中使用

就是說只有我們自己引入的 svg 文件需要經(jīng)過 svg-sprite-loader,那么就將這些 svg 統(tǒng)一放到一個目錄下,我這里放到了 src/icons

然后要在用到的地方引入需要的svg

import './src/icon/target.svg';

重新啟動項目,終于在 html 中看到了 symbol 標簽!

配置好了,就可以用了。使用方法很簡單,相較于原來插入 svg 圖標的方法(img src 或將 svg 整個寫入 html),用 svg-sprite 更加簡單且清爽:

<svg><use xlink:href="#target" /></svg>

嗯,就這樣短短一行。 xlink:href 中傳入 svg ID 就好了,由于在上面的配置文件中我們直接使用文件名作為 symbol 的 ID,所以這里傳入的 ID 即為你想顯示的圖標的 svg 文件名,記得加上 # 。

自動導入

你會發(fā)現(xiàn),這里要想插入某個圖標,都得 import ,每用一個都要重復一遍這個流程,太麻煩,那么我們就讓 src/icons/svg/下的 svg 文件都自動導入吧。

webpack 可以幫我們做到:

// requires and returns all modules that match
const requireAll = requireContext => requireContext.keys().map(requireContext);
// import all svg
const req = require.context('./assets/svg', true, /\.svg$/);
requireAll(req);

代碼實例:

svg-sprite-loader如何在VUE-cli3中使用

首先在main.ts中引入import './icons/index',

icons/index.js,將icons/svg中的所有svg導入并注冊全局組件SvgIcon

svg-sprite-loader如何在VUE-cli3中使用

//SvgIcon組件代碼

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

<script>
export default {
 name: 'SvgIcon',
 props: {
  iconClass: {
   type: String,
   required: true
  },
  className: {
   type: String,
   default: ''
  }
 },
 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>

接下來就可以使用組建了

svg-sprite-loader如何在VUE-cli3中使用

上述就是小編為大家分享的 svg-sprite-loader如何在VUE-cli3中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI