基于Vue實(shí)現(xiàn)自定義組件的方式引入圖標(biāo)
前言
在項(xiàng)目開發(fā)中,使用圖標(biāo)的方式有很多種,可以在iconfont上面找到合適的圖標(biāo),通過(guò)http或者直接下載使用,這里我分享一種通過(guò)實(shí)現(xiàn)自定義組件的方式引入圖標(biāo)。
搭建環(huán)境
這里通過(guò)@vue/cli 4.5.13新建項(xiàng)目,并且需要安裝依賴svg-sprite-loader,用來(lái)處理對(duì)應(yīng)的svg圖標(biāo),方便我們使用。
安裝: npm install --save-dev svg-sprite-loader
配置vue.config.js
在安裝svg-sprite-loader后,新建vue.config.js來(lái)配置依賴:
// vue.config.js const { resolve } = require('path') module.exports = { chainWebpack(config) { config .module .rule('svg') .exclude .add(resolve('src/icons')) .end() config .module .rule('icons') .test(/\.svg$/) .include .add(resolve('src/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) } }
這里通過(guò)chainWebpack來(lái)做了兩項(xiàng)配置:
- 第一個(gè)是讓原來(lái)的其他處理svg的依賴不處理src/icons下我們的自定義圖標(biāo)文件
- 通過(guò)svg-sprite-loader來(lái)處理自定義的圖標(biāo)文件,options里面的設(shè)置表示,生成的svg的symbolId為icon和文件名的拼接。
新建圖標(biāo)組件
在components目錄下新建一個(gè)SvgIcon.vue文件:
<template> <i class="icon"> <!-- aria-hidden, 幫助殘障人士閱讀(設(shè)備讀取內(nèi)容時(shí)會(huì)跳過(guò)這個(gè)標(biāo)簽以免混淆) --> <svg aria-hidden="true" :width="size" :height="size" :fill="fillColor"> <use :xlink:href="iconName" rel="external nofollow" ></use> </svg> </i> </template> <script lang="ts"> import { PropType, toRefs } from 'vue' export default { props: { size: { type: Number as PropType<number>, default: 14 }, fillColor: { type: String as PropType<string>, default: '#000' }, iconName: { type: String as PropType<string>, required: true } }, setup(props: any) { const { size, fillColor, iconName: _iconName } = toRefs(props) const iconName = `#${_iconName.value}` return { size, fillColor, iconName } } } </script>
然后,新建一個(gè)icons目錄,并且新建一個(gè)index文件,用來(lái)掛在組件和引入svg圖標(biāo):
// index.ts import SvgIcon from '@/components/SvgIcon.vue' import { App } from 'vue' export default (app: App) => { app.component('svg-icon', SvgIcon) } const ctx = require.context('./svg', false, /\.svg$/) const requestAll = (ctx: __WebpackModuleApi.RequireContext) => ctx.keys().forEach(ctx) requestAll(ctx)
// main.ts import { createApp } from 'vue' import App from './App.vue' import installSvgIcon from '@/icons/index' const app = createApp(App) installSvgIcon(app) app.mount('#app')
這個(gè)文件做了兩件事:
- 通過(guò)導(dǎo)出一個(gè)方法來(lái)掛載全局組件svg-icon;
- 通過(guò)require.context來(lái)實(shí)現(xiàn)自動(dòng)化引入svg目錄下的圖標(biāo)文件。
使用組件
首先,我們要在icons/svg目錄下存放svg圖標(biāo)文件(在iconfont上找自己需要的);
然后,就可以在其他地方使用啦:
<template> <img alt="Vue logo" src="./assets/logo.png"> <svg-icon icon-name="icon-dashboard"></svg-icon> <HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/> </template>
直接通過(guò)組件svg-icon的方式引入,然后傳入icon-name即可,icon-name的值由icon拼接svg文件名組成。
總結(jié)
這種自定義方式引入svg圖標(biāo)的方式,還是挺方便的,想要加上一個(gè)圖標(biāo)的時(shí)候,幾步即可:
- 直接下載好svg文件放入對(duì)應(yīng)目錄中;
- 接著通過(guò)svg-icon組件來(lái)引入。
但是,修改樣式時(shí)不能通過(guò)css來(lái)修改,這點(diǎn)就不太方便了。
到此這篇基于Vue實(shí)現(xiàn)自定義組件的方式引入圖標(biāo)的文章就介紹到這了,更多相關(guān)Vue自定義的圖標(biāo)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在vue中使用screenfull?依賴,實(shí)現(xiàn)全屏組件方式
這篇文章主要介紹了在vue中使用screenfull?依賴,實(shí)現(xiàn)全屏組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Vue.js第一天學(xué)習(xí)筆記(數(shù)據(jù)的雙向綁定、常用指令)
這篇文章主要為大家分享了Vue.js第一天的學(xué)習(xí)筆記,包括數(shù)據(jù)的雙向綁定、常用指令學(xué)習(xí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12vue前端獲取不同客戶端mac地址最詳細(xì)步驟(避免踩坑)
在開發(fā)過(guò)程中,綁定賬號(hào)和電腦的功能可以通過(guò)獲取電腦的MAC地址實(shí)現(xiàn),下面這篇文章主要介紹了vue前端獲取不同客戶端mac地址的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10用vue-cli開發(fā)vue時(shí)的代理設(shè)置方法
今天小編就為大家分享一篇用vue-cli開發(fā)vue時(shí)的代理設(shè)置方法,具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09ElementUI之表格toggleRowSelection選中踩坑記錄
這篇文章主要介紹了ElementUI之表格toggleRowSelection選中踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03vue.js+element-ui的基礎(chǔ)表單實(shí)例代碼
這篇文章主要介紹了vue.js+element-ui的基礎(chǔ)表單實(shí)例代碼,技術(shù)棧即html+vue.js+element-ui,而使用它們的方法也很簡(jiǎn)單,引入對(duì)應(yīng)的js和css文件即可,需要的朋友可以參考下2024-03-03Vue中@keyup.enter?@v-model.trim的用法小結(jié)
這篇文章主要介紹了Vue中@keyup.enter?@v-model.trim的用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12