欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue項(xiàng)目中使用Svg的方法

 更新時(shí)間:2018年10月24日 14:20:24   作者:lMadman  
本文主要以 vue-cli3 搭建的項(xiàng)目為例,來(lái)聊一下如何在項(xiàng)目中更優(yōu)雅的使用 svg 。感興趣的朋友跟隨小編一起看看吧

github demo: github地址

閑聊背景

本文主要以 vue-cli3 搭建的項(xiàng)目為例,來(lái)聊一下如何在項(xiàng)目中更優(yōu)雅的使用 svg 。

眾所周知, vue-cli3 已經(jīng)推出很長(zhǎng)一段時(shí)間了,大家可以感受一下 vue-cli3 帶來(lái)的零配置體驗(yàn)。But,也相應(yīng)帶來(lái)了一些弊端,就是如歸需要修改默認(rèn)的 loader 時(shí),會(huì)比較麻煩。

們接下來(lái)主要使用的就是上文中提到的 svg 的 use ,先上一張 vue-cli3 搭建的項(xiàng)目的目錄,可以看到根目錄下只保留了 public/ 以及 src/ ,可以說非常干凈,大家可以自己創(chuàng)建一個(gè)。

在 src/components/ 下創(chuàng)建 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/ 下創(chuàng)建一個(gè) icons 目錄,目錄結(jié)構(gòu)如下:

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

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

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

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

當(dāng)然,如果你有自己的想法或需求,可以單獨(dú)引入,無(wú)需非要注冊(cè)到全局。

在 main.js 中引入

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

好了,接下來(lái)是最重要的一步:

修改默認(rèn)的 loader :

大家可以去vue-cli3官網(wǎng)去查看具體教程,這里我只說需要修改的 loader 以及具體的代碼實(shí)現(xiàn)。

首先需要注意的是,通過 vue-cli3 構(gòu)建的項(xiàng)目可以初始化進(jìn)行很多選擇,我構(gòu)建的目錄更多的是以 *.config.js 的形式存在的。

在根目錄下創(chuàng)建一個(gè)名為 vue.config.js 文件,接下來(lái)的操作都和它有關(guān),先來(lái)看一下它完整的代碼:

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, 如果不這樣做會(huì)添加在此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',
  },
  },
 },
 },
}

大家忽略無(wú)關(guān)緊要的代碼,重點(diǎn)從 svg rule loader 注釋開始,其實(shí)注釋已經(jīng)比較詳細(xì)了,就是獲取默認(rèn)的 loader 并進(jìn)行相關(guān)的修改,主要有 svg-loader 、 images-loader ,從 vue-cli3 基礎(chǔ)loader 中可以找到這兩個(gè) loader 的默認(rèn)配置。

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

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

如何使用?

  • 可以把設(shè)計(jì)大大給的svg 或者從iconfont官網(wǎng)下載開源的icon的svg格式,復(fù)制到 src/icons/svg 目錄下;
  • 點(diǎn)擊 svg 查看源碼,修改 fill 屬性, fill="currentColor" ,或者 fill="" ,如果無(wú)此屬性,就不用管,這樣做是可以讓外部控制icon的顏色,或隨父元素的color;
  • 注意svg命名和SvgIcon命名一致,看一下最終使用:

這里就會(huì)使用 src/icons/svg/go-back.svg 文件。

總結(jié):

以上講的比較糙,奈何文字功底是硬傷,最后附上github demo 代碼示例:
此項(xiàng)目也可以當(dāng)做項(xiàng)目初始架構(gòu),內(nèi)置了vue-router、vuex等。
本文以vue-cli3創(chuàng)建的項(xiàng)目為例,之前的項(xiàng)目可以直接去手動(dòng)修改對(duì)應(yīng)的loader即可。

github地址

總結(jié)

以上所述是小編給大家介紹的vue項(xiàng)目中使用Svg的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue3封裝自定義v-model的hooks示例詳解

    vue3封裝自定義v-model的hooks示例詳解

    這篇文章主要為大家介紹了vue3封裝自定義v-model的hooks示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vue簡(jiǎn)易版無(wú)限加載組件實(shí)現(xiàn)原理與示例代碼

    Vue簡(jiǎn)易版無(wú)限加載組件實(shí)現(xiàn)原理與示例代碼

    這篇文章主要給大家介紹了關(guān)于Vue簡(jiǎn)易版無(wú)限加載組件實(shí)現(xiàn)原理與示例代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 對(duì)Vue- 動(dòng)態(tài)元素屬性及v-bind和v-model的區(qū)別詳解

    對(duì)Vue- 動(dòng)態(tài)元素屬性及v-bind和v-model的區(qū)別詳解

    今天小編就為大家分享一篇對(duì)Vue- 動(dòng)態(tài)元素屬性及v-bind和v-model的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • Vue3渲染器與編譯器深入淺析

    Vue3渲染器與編譯器深入淺析

    這篇文章主要為大家介紹了Vue3渲染器與編譯器深入淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • vue子組件獲取到它父組件數(shù)據(jù)的4種方法

    vue子組件獲取到它父組件數(shù)據(jù)的4種方法

    這篇文章主要給大家介紹了關(guān)于vue子組件獲取到它父組件數(shù)據(jù)的4種方法,對(duì)于vue來(lái)說組件之間的消息傳遞是非常重要的,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • vue環(huán)境搭建簡(jiǎn)單教程

    vue環(huán)境搭建簡(jiǎn)單教程

    這篇文章主要介紹了vue環(huán)境搭建簡(jiǎn)單教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • vue前端和Django后端如何查詢一定時(shí)間段內(nèi)的數(shù)據(jù)

    vue前端和Django后端如何查詢一定時(shí)間段內(nèi)的數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于vue前端和Django后端如何查詢一定時(shí)間段內(nèi)的數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 解決Vue3使用Element-Plus導(dǎo)航刷新后active高亮消失的問題

    解決Vue3使用Element-Plus導(dǎo)航刷新后active高亮消失的問題

    這篇文章主要給大家介紹了如何解決Vue3使用Element-Plus導(dǎo)航刷新后active高亮消失的問題,文中有相關(guān)的代碼講解,需要的朋友可以參考下
    2023-08-08
  • 5個(gè)實(shí)用的Vue技巧分享

    5個(gè)實(shí)用的Vue技巧分享

    在這篇文章中,我們將探討五個(gè)實(shí)用的?Vue?技巧,這些技巧可以使你日常使用?Vue?編程更高效、更富有成效,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • vue下載文件以及文件重命名方式

    vue下載文件以及文件重命名方式

    這篇文章主要介紹了vue下載文件以及文件重命名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評(píng)論