<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
技術棧:vue3+vue-cli4
目前大多數是基於vue2引入,所以想基於vue3需要做一些改動(注意該方法是基於vue-cli中使用的,因為webpack提供了require.context(),基於vite構建的專案則不能使用該文章提供的方法)
npm install svg-sprite-loader --save-dev
<template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName" rel="external nofollow" ></use> </svg> </template> <script> import { computed } from "@vue/reactivity"; export default { name: "baseSvgIcon", props: { iconClass: { type: String }, className: { type: String }, }, setup(props) { const iconName = computed(() => { return props.iconClass ? `#icon-${props.iconClass}` : "#icon"; }); const svgClass = computed(() => { return props.className ? "svg-icon " + props.className : "svg-icon"; }); return { iconName, svgClass }; }, }; </script> <style scoped lang="scss"> .svg-icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } </style>
imgs資料夾裡含一個svg資料夾,放svg格式檔案,以及一個index.js檔案,該檔案內容如下
// 獲取當前目錄所有為.svg的檔案 const req = require.context('./svg', false, /.svg$/) // 解析獲取的.svg檔案的檔名稱並返回 const requireAll = (requireContext) =>{ return requireContext.keys().map(requireContext) } requireAll(req)
經評論區總結,如果是在非vue-cli4的專案中,在config.module.rules.delete("svg");
報錯的話,可以嘗試使用config.module.rule("svg").exclude.add(resolve("src/assets/imgs")).end();
替換該語句
const path = require('path') function resolve(dir) { return path.join(__dirname, '.', dir) } module.exports = { chainWebpack: config => { config.module.rules.delete("svg"); // 重點:刪除預設設定中處理svg, config.module .rule('svg-sprite-loader') .test(/.svg$/) .include .add(resolve('src/assets/imgs')) // 處理svg目錄 .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) }, };
此處注意,將元件註冊放到main.js裡。不然會報[Vue warn]: Failed to resolve component: svg-icon的問題,預測為父元件先建立完了而子元件還沒建立進去,導致該問題的出現
import { createApp } from 'vue' import App from './App.vue' import router from './router' import store from './store' import '@/assets/icons' const app = createApp(App) import SvgIcon from '@/components/svgIcon' app.component('svg-icon', SvgIcon) app.use(store).use(router).mount('#app')
<div class="topLeft"> <svg-icon icon-class="category"></svg-icon> </div> <div class="topCenter"></div> <div class="topRight"> <svg-icon icon-class="search"></svg-icon> </div>
1、如果是vue2進行使用的可以參考該文章:https://www.jianshu.com/p/cb67bb4a79f2
2、我看到過的另一種解決思路,將index.js檔案裡的內容放入到main.js裡,但我覺得分開層次更清晰,該解決方案在該文章的評論裡:https://zhuanlan.zhihu.com/p/335107384
3、在vite中使用svg的可以參考我另一篇文章:https://www.jb51.net/article/258650.htm
4、評論區裡有人成功了,我上傳一版demo放到gitee裡了,有問題的地方大家可以對照看看:https://gitee.com/zasulan/csdn-item/tree/master/vue-music-app,重新上傳了一版無node-scss的版本,因為大家的node版本或者vue-cli版本可能不一致,npm install會報錯因此去除,有需要可自行安裝
到此這篇關於vue3+vue-cli4中使用svg的文章就介紹到這了,更多相關vue3+vue-cli4使用svg內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45