亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue項目中使用Svg的方法

2019-11-19 12:38:18
字體:
來源:轉載
供稿:網友

github demo: github地址

閑聊背景

本文主要以 vue-cli3 搭建的項目為例,來聊一下如何在項目中更優雅的使用 svg 。

眾所周知, vue-cli3 已經推出很長一段時間了,大家可以感受一下 vue-cli3 帶來的零配置體驗。But,也相應帶來了一些弊端,就是如歸需要修改默認的 loader 時,會比較麻煩。

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

在 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 目錄,目錄結構如下:

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 中引入

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

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

修改默認的 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命名一致,看一下最終使用:

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

總結:

以上講的比較糙,奈何文字功底是硬傷,最后附上github demo 代碼示例:
此項目也可以當做項目初始架構,內置了vue-router、vuex等。
本文以vue-cli3創建的項目為例,之前的項目可以直接去手動修改對應的loader即可。

github地址

總結

以上所述是小編給大家介紹的vue項目中使用Svg的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产原创欧美精品| 久久久久久久影视| 日本精品在线视频| 国产精品久久77777| 亚洲丁香婷深爱综合| 日韩欧美在线字幕| 国产亚洲精品美女久久久久| 91wwwcom在线观看| 欧美在线观看视频| 国产精品免费视频久久久| 亚洲欧美国产另类| 日本高清+成人网在线观看| 亚洲精品国产美女| 97在线看福利| 中文字幕不卡av| 亚洲欧美日韩中文视频| 国产精品扒开腿做爽爽爽的视频| 久久免费国产精品1| 亚洲精品一二区| 日产日韩在线亚洲欧美| 亚洲免费小视频| 欧美国产视频日韩| 亚洲成在人线av| 国产一区红桃视频| 热久久视久久精品18亚洲精品| 136fldh精品导航福利| 亚洲午夜未删减在线观看| 中文字幕日韩在线视频| 91精品国产综合久久香蕉最新版| 欧美日韩精品在线观看| 日本一区二三区好的精华液| 伊人久久五月天| 亚洲午夜国产成人av电影男同| 91免费在线视频网站| 久久91精品国产91久久跳| 另类色图亚洲色图| 中文字幕自拍vr一区二区三区| 色与欲影视天天看综合网| 久久中文字幕国产| 欧美大片大片在线播放| 日韩精品视频观看| 欧美高清一级大片| 青青草精品毛片| 国产欧美久久久久久| 欧美视频在线免费看| 国产精品永久免费视频| 亚洲美女av在线播放| 亚洲国产99精品国自产| 精品国产福利在线| 精品日本高清在线播放| 5566日本婷婷色中文字幕97| 成人激情黄色网| 欧美与欧洲交xxxx免费观看| 亚洲欧美第一页| 亚洲一区二区黄| 国产精品成人播放| 亚洲人成网在线播放| 国产美女精品免费电影| 77777亚洲午夜久久多人| 中文字幕日韩av| 国产精品福利观看| 国产欧美精品在线播放| 久久久久免费精品国产| 欧美在线欧美在线| 日韩h在线观看| 国产精品99久久99久久久二8| 日韩黄色av网站| 日韩最新免费不卡| 亚洲成年网站在线观看| 欧美性猛交xxxx黑人| 亚洲一区二区三区四区在线播放| 中文字幕日韩av综合精品| 精品国产网站地址| 久热爱精品视频线路一| 一区二区欧美激情| 中文字幕久久久av一区| 亚洲天堂av综合网| 久久中文字幕国产| 欧美成人一二三| www.色综合| 成人久久精品视频| 国产区精品在线观看| 欧美成人精品在线视频| 国产精品日韩久久久久| 亚洲男人天堂2024| 77777亚洲午夜久久多人| 久久久久久久爱| 国产精品视频精品视频| www.欧美三级电影.com| 国产美女扒开尿口久久久| 日韩欧美在线视频日韩欧美在线视频| 国外色69视频在线观看| 国产精品啪视频| 色悠悠久久久久| 国产精品一区二区性色av| 日韩激情av在线免费观看| 一区二区三区无码高清视频| 亚洲老司机av| 精品视频—区二区三区免费| 午夜精品福利电影| 中文字幕日韩高清| 国产成人一区二区在线| 国产精品日韩专区| 国产精品99久久久久久白浆小说| 亚洲黄色有码视频| 日本高清久久天堂| 日韩欧美精品中文字幕| 国产亚洲欧美日韩一区二区| 亚洲国语精品自产拍在线观看| 最近免费中文字幕视频2019| 国产亚洲精品美女久久久久| 成人欧美在线观看| 日本欧美精品在线| 亚州成人av在线| 国产精品自产拍高潮在线观看| 91po在线观看91精品国产性色| 亚洲第一精品久久忘忧草社区| 亚洲欧美日本精品| 国产精品扒开腿做爽爽爽男男| 精品国产乱码久久久久酒店| 国产成人综合一区二区三区| 亚洲一级黄色av| 欧美性一区二区三区| 精品国产一区二区三区久久狼5月| 91精品久久久久久久久久久| 国产日韩中文字幕| 亚洲精品av在线播放| 久久久国产一区二区| 欧美成人国产va精品日本一级| 国产91色在线|免| 久久久久久久影视| 国产午夜精品视频免费不卡69堂| 国产精品视频久久久| 亚洲国模精品一区| 亚洲午夜未满十八勿入免费观看全集| 97香蕉超级碰碰久久免费软件| 欧美成人激情视频免费观看| 国产美女久久久| 国产精品流白浆视频| 国内外成人免费激情在线视频网站| 国产精品久久久久久久久久久久久久| 国产精品va在线播放我和闺蜜| 色妞一区二区三区| 国产精品电影一区| 91超碰caoporn97人人| 在线播放国产一区中文字幕剧情欧美| 日韩在线视频导航| 欧美网站在线观看| 亚洲欧洲激情在线| 亚洲欧美国产日韩天堂区| 国产精品伦子伦免费视频| 欧美久久精品午夜青青大伊人| 日本精品免费一区二区三区| 亚洲欧美日韩在线一区| 亚洲激情视频在线观看| 久久久天堂国产精品女人| 欧美在线观看网址综合| 欧美资源在线观看| 欧美极品少妇全裸体| 国产精品久久久久国产a级| 国产成人在线视频| 国产精品久久精品| 欧美激情精品久久久久久大尺度| 国产精品视频精品视频|