您好,登錄后才能下訂單哦!
這篇“基于Vue只能實現(xiàn)自定義組件引入圖標(biāo)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“基于Vue只能實現(xiàn)自定義組件引入圖標(biāo)”文章吧。
這里通過@vue/cli 4.5.13新建項目,并且需要安裝依賴svg-sprite-loader,用來處理對應(yīng)的svg圖標(biāo),方便我們使用。
安裝: npm install --save-dev svg-sprite-loader
在安裝svg-sprite-loader后,新建vue.config.js來配置依賴:
// 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]" }) } }
這里通過chainWebpack來做了兩項配置:
第一個是讓原來的其他處理svg的依賴不處理src/icons下我們的自定義圖標(biāo)文件
通過svg-sprite-loader來處理自定義的圖標(biāo)文件,options里面的設(shè)置表示,生成的svg的symbolId為icon和文件名的拼接。
在components目錄下新建一個SvgIcon.vue文件:
<template> <i> <!-- aria-hidden, 幫助殘障人士閱讀(設(shè)備讀取內(nèi)容時會跳過這個標(biāo)簽以免混淆) --> <svg aria-hidden="true" :width="size" :height="size" :fill="fillColor"> <use :xlink:href="iconName" rel="external nofollow" ></use> </svg> </i> </template> <script> 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>
然后,新建一個icons目錄,并且新建一個index文件,用來掛在組件和引入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")
這個文件做了兩件事:
通過導(dǎo)出一個方法來掛載全局組件svg-icon;
通過require.context來實現(xiàn)自動化引入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>
直接通過組件svg-icon的方式引入,然后傳入icon-name即可,icon-name的值由icon拼接svg文件名組成。
以上就是關(guān)于“基于Vue只能實現(xiàn)自定義組件引入圖標(biāo)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。