如何在vue項目中使用Svg方法

這篇文章將為大家詳細講解有關如何在vue項目中使用Svg方法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

創新互聯公司-專業網站定制、快速模板網站建設、高性價比烏翠網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式烏翠網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋烏翠地區。費用合理售后完善,十載實體公司更值得信賴。

如何在vue項目中使用Svg方法

在 src/components/ 下創建 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>

在 src/ 下創建一個 icons 目錄,目錄結構如下:

如何在vue項目中使用Svg方法

svg 目錄主要用于存放 svg 文件,來看一下 index.js 的內容,功能就是把組件注冊到全局,方便使用:

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

// 注冊到全局
Vue.component('svg-icon', SvgIcon)

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

當然,如果你有自己的想法或需求,可以單獨引入,無需非要注冊到全局。

在 main.js 中引入

如何在vue項目中使用Svg方法

這一步就沒什么好說的了,如果需要注冊到全局,需要在入口文件中引入。

好了,接下來是最重要的一步:

修改默認的 loader :

大家可以去vue-cli3官網去查看具體教程,這里我只說需要修改的 loader 以及具體的代碼實現。

首先需要注意的是,通過 vue-cli3 構建的項目可以初始化進行很多選擇,我構建的目錄更多的是以 *.config.js 的形式存在的。

在根目錄下創建一個名為 vue.config.js 文件,接下來的操作都和它有關,先來看一下它完整的代碼:

const path = require('path')

function resolve (dir) {
 return path.join(__dirname, './', dir)
}

module.exports = {
 chainWebpack: config => {
 config.plugin('define').tap(args => {
  const argv = process.argv
  const icourt = argv[argv.indexOf('--icourt-mode') + 1]

  args[0]['process.env'].MODE = `"${icourt}"`

  return args
 })
 // svg rule loader
 const svgRule = config.module.rule('svg') // 找到svg-loader
 svgRule.uses.clear() // 清除已有的loader, 如果不這樣做會添加在此loader之后
 svgRule.exclude.add(/node_modules/) // 正則匹配排除node_modules目錄
 svgRule // 添加svg新的loader處理
  .test(/\.svg$/)
  .use('svg-sprite-loader')
  .loader('svg-sprite-loader')
  .options({
  symbolId: 'icon-[name]',
  })

 // 修改images loader 添加svg處理
 const imagesRule = config.module.rule('images')
 imagesRule.exclude.add(resolve('src/icons'))
 config.module
  .rule('images')
  .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
 },
 configureWebpack: {
 devServer: {
  open: true,
  // https: true,
  proxy: {
  '/user': {
   target: 'https://devadminschool.icourt.cc',
  },
  '/live': {
   target: 'https://devadminschool.icourt.cc',
  },
  },
 },
 },
}

大家忽略無關緊要的代碼,重點從 svg rule loader 注釋開始,其實注釋已經比較詳細了,就是獲取默認的 loader 并進行相關的修改,主要有 svg-loader 、 images-loader ,從 vue-cli3 基礎loader 中可以找到這兩個 loader 的默認配置。

// 默認的svg loader...
webpackConfig.module
 .rule('svg')
 .test(/\.(svg)(\?.*)?$/)
 .use('file-loader')
  .loader('file-loader')
  .options({
  name: genAssetSubPath('img')
  })
  
// 默認的images loader...
webpackConfig.module
  .rule('images')
  .test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
  .use('url-loader')
   .loader('url-loader')
   .options(genUrlLoaderOptions('img'))

對比我一開始的代碼可以看出,我把默認的 svg loader 配置中使用的 file-loader 改為了 svg-sprite-loader ,并排除了 node_modules ,把默認的 images-loader 配置添加了 svg ,并排除了 src/icons 目錄。

如何使用?

  • 可以把設計大大給的svg 或者從iconfont官網下載開源的icon的svg格式,復制到 src/icons/svg 目錄下;

  • 點擊 svg 查看源碼,修改 fill 屬性, fill="currentColor" ,或者 fill="" ,如果無此屬性,就不用管,這樣做是可以讓外部控制icon的顏色,或隨父元素的color;

  • 注意svg命名和SvgIcon命名一致,看一下最終使用:

如何在vue項目中使用Svg方法

關于如何在vue項目中使用Svg方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網頁名稱:如何在vue項目中使用Svg方法
本文地址:http://m.kartarina.com/article34/jedepe.html

成都網站建設公司_創新互聯,為您提供商城網站ChatGPT網站設計公司服務器托管品牌網站制作全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 无码乱人伦一区二区亚洲| 久久久久成人精品无码中文字幕| 亚洲人片在线观看天堂无码 | 日韩人妻无码一区二区三区久久| 精品无码一区二区三区爱欲九九| 免费A级毛片无码久久版| 国产成人无码区免费网站 | 国产成人精品无码一区二区| 亚洲真人无码永久在线观看| 国产精品无码无片在线观看| 人妻少妇精品无码专区| 无码少妇一区二区性色AV| 国产人成无码视频在线观看 | 久久亚洲精品无码aⅴ大香| 中文字幕无码免费久久9一区9 | 国产精品亚洲αv天堂无码| 无码av免费毛片一区二区| 国模无码一区二区三区不卡| 国产精品无码一区二区三区不卡 | 在线A级毛片无码免费真人| 亚洲AV区无码字幕中文色| 亚洲一级Av无码毛片久久精品| 亚洲中文字幕久久精品无码VA| 亚洲真人无码永久在线| 免费无码一区二区三区蜜桃| 人妻中文字幕AV无码专区| 亚洲人av高清无码| 综合无码一区二区三区四区五区 | 精品无码成人久久久久久| 日木av无码专区亚洲av毛片| 亚洲精品无码久久久久去q| 久久伊人中文无码| 国产亚洲精品无码拍拍拍色欲| 亚洲av无码国产精品色在线看不卡| 亚洲精品无码av中文字幕| 日韩放荡少妇无码视频| 亚洲精品无码av中文字幕| 日韩激情无码免费毛片| 国产午夜无码片在线观看影院 | av大片在线无码免费| 亚洲成av人片天堂网无码】|