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

vue3中批量全局注冊(cè)組件實(shí)例詳解

 更新時(shí)間:2023年05月31日 10:52:10   作者:m0_62317155  
在vue中,我們?cè)趍ain.ts引入的全局注冊(cè)的組件是可以不需要import導(dǎo)入而直接使用的,使用的時(shí)候是自己全局注冊(cè)組件時(shí)的名稱,而不是組件名,這篇文章主要介紹了vue3中批量全局注冊(cè)組件,需要的朋友可以參考下

Vue3中批量全局祖冊(cè)組件

學(xué)習(xí)的時(shí)候順便記錄一下,用于個(gè)人學(xué)習(xí)使用vite+vue3+ts,如果想直接看批量注冊(cè)全局組件的,看文章目錄,直接點(diǎn)目錄跳轉(zhuǎn)即可

在vue中,我們?cè)趍ain.ts引入的全局注冊(cè)的組件是可以不需要import導(dǎo)入而直接使用的。使用的時(shí)候是自己全局注冊(cè)組件時(shí)的名稱,而不是組件名。如下圖所示的Helloword,而不是HelloWorldVue那個(gè),具體看下圖所示就可以了

除了在main.ts中直接寫引入組件之外,我們還可以通過自己寫一個(gè)ts文件,然后在main.ts引用它,來達(dá)到全局注冊(cè)組件的目的。如下所示

index.js的代碼如下所示

import {App} from 'vue'
import HomeVue from './Home.vue';
export default {
  install(app: App) {
    app.component("Home", HomeVue);
  }
}

main.ts中的代碼如下

import { createApp } from 'vue'
import './style.css'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
// 全局注冊(cè)組件
import HelloWorldVue from './components/HelloWorld.vue'
// 引入ts文件對(duì)應(yīng)的全局注冊(cè)的組件的配置
import components  from './components/index'
const app = createApp(App)
// 全局注冊(cè)組件
app.component("Helloword",HelloWorldVue)
// 對(duì)ts文件中的全局組件進(jìn)行配置
app.use(components)
app.use(ElementPlus).mount('#app')

結(jié)果如下圖所示

批量注冊(cè)全局組件

通過循環(huán)就可以批量注冊(cè)全局組件了,如下圖所示

myComponents.ts的代碼如下

import {App} from 'vue'
import HomeVue from './Home.vue';
import HelloWorldVue from './HelloWorld.vue';
/** 
export default {
  install(app: App) {
    app.component("Home", HomeVue);
    app.component("Helloword", HelloWorldVue)
  }
}
*/
const components = [
  {title: 'Home', componentName: HomeVue},
  {title: 'Helloword', componentName: HelloWorldVue}
]
export default {
  install(app: App) {
    components.forEach(item => {
      // 通過循環(huán)遍歷數(shù)據(jù)批量注冊(cè)組件
      app.component(item.title, item.componentName)
    })
  }
}

main.ts的代碼如下:

import { createApp } from 'vue'
import './style.css'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
// 引入ts文件對(duì)應(yīng)的全局注冊(cè)的組件的配置
import components  from './components/myComponents'
const app = createApp(App)
// 對(duì)ts文件中的全局組件進(jìn)行配置
app.use(components)
app.use(ElementPlus).mount('#app')

App.vue如下

<script setup lang="ts">
</script>
<template>
  <div id="app">
    <Helloword></Helloword>
    <hr>
    <Home></Home>
  </div>
</template>
<style scoped>
</style>

結(jié)果如下圖所示

vite查找.vue 結(jié)尾的文件

但是這里還是需要我們自己手寫一個(gè)一個(gè)引入組件,然后實(shí)現(xiàn)批量導(dǎo)入,那么有沒有一種辦法就是。我讀取某一個(gè)目錄下中以(點(diǎn)).vue結(jié)尾的文件,然后將其注冊(cè)為全局組件。這樣就可以不用一個(gè)一個(gè)手動(dòng)import導(dǎo)入了。我們可以利用功能 | Vite 官方中文文檔 (vitejs.dev)中提供的import.meta.glob找到以(點(diǎn)).vue結(jié)尾的文件以及相關(guān)的信息,import.meta.glob的通配符是* 或者是 **,也可以使用!進(jìn)行反選操作。

這里的./表示當(dāng)前使用了import.meta.glob的ts文件所在的目錄,具體看下面的截圖說明即可

import.meta.glob("./path/**/*.vue") 如這里:查找當(dāng)前目錄下的path目錄下和(path目錄下的子目錄中的)以(點(diǎn)).vue結(jié)尾的文件

import.meta.glob("./path/*.vue")如這里:查找當(dāng)前目錄下的path目錄下的以(點(diǎn)).vue結(jié)尾的文件,不包括子目錄中的文件

如下圖所示,這里注意看下圖中myComponents.ts文件所在的位置,以及對(duì)應(yīng)的目錄位置,我們要找的是使用了import.meta.glob(“./path/*.vue”)的ts文件對(duì)應(yīng)需要掃描的文件夾的位置。具體看下圖就知道了

console.log的結(jié)果如下所示,可以結(jié)合圖中所示的目錄看一下

如果去掉**號(hào),那就只是找當(dāng)前目錄下的以.vue結(jié)尾的文件,如下圖所示

console.log()的結(jié)果如下所示,可以結(jié)合圖中所示的目錄看一下

如:我將myComponents.ts換一個(gè)位置,我們只需要找到對(duì)應(yīng)的位置需要掃描的文件路徑即可,如下圖所示

console.log()的結(jié)果如下,可以找到對(duì)應(yīng)的以點(diǎn).vue結(jié)尾的文件

通過 import.meta.glob("./path/**/*.vue") 的形式批量注冊(cè)全局組件

注意:這里我將myComponents.ts重新放到了components目錄下了

console.log()打印的結(jié)果如下

所以上面就相當(dāng)于如果是aaa.vue組件,則就是類似于app.component(“aaa”(這個(gè)全局注冊(cè)的名稱), aaa(這個(gè)是組件))即app.component(“aaa”,aaa)。只不過這里是動(dòng)態(tài)引入而已,他們的調(diào)用關(guān)系截圖如下所示,截圖的代碼在后面

myComponents.ts的代碼如下

import {App} from 'vue'
import { defineAsyncComponent,AsyncComponentLoader } from "vue";
const componentss = import.meta.glob("./**/*.vue");
console.log(componentss)
console.log(Object.entries(componentss))
/**
 * 全局組件引用管理
 */
export default {
  install(app: App) {
    for (let [key, value] of Object.entries(componentss)) {
      // 字符串截取,具體看下面console.log()中的name就知道了
      let name = key.slice(key.lastIndexOf("/") + 1, key.lastIndexOf("."));
      console.log(`注意這里的name名稱=》》            ${name}       ===>這個(gè)名稱,
      自己作為了全局祖冊(cè)組件的名稱了,也就是如左側(cè)目錄的:aaa.vue去掉.vue就剩下aaa了
      ,然后那這個(gè)名稱作為組件引用的名稱,具體看截圖就知道了。這時(shí)就是相當(dāng)于跟左側(cè)
      項(xiàng)目目錄的.vue結(jié)尾的文件去掉.vue得到的名稱`)
      app.component(name, defineAsyncComponent(value as AsyncComponentLoader));
    }      
  }
}

main.ts代碼如下

import { createApp } from 'vue'
import './style.css'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
// 引入ts文件對(duì)應(yīng)的全局注冊(cè)的組件的配置
import components  from './components/myComponents'
const app = createApp(App)
// 對(duì)ts文件中的全局組件進(jìn)行配置
app.use(components)
app.use(ElementPlus).mount('#app')

App.vue

<script setup lang="ts">
</script>
<template>
  <div id="app">
    <HelloWorld></HelloWorld>
    <hr>
    <Home></Home>
    <hr>
    <aaa></aaa>
    <hr>
    <bbb></bbb>
  </div>
</template>
<style scoped>
</style>

結(jié)果如下所示

這時(shí)我在components目錄下新建一個(gè)ccc.vue文件,只要我新建的組件,直接寫標(biāo)簽就行了,不再需要手動(dòng)import引入了。如下圖所示

結(jié)果如下圖所示

到此這篇關(guān)于vue3中批量全局注冊(cè)組件的文章就介紹到這了,更多相關(guān)vue3全局注冊(cè)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 組件基礎(chǔ)知識(shí)總結(jié)

    vue 組件基礎(chǔ)知識(shí)總結(jié)

    這篇文章主要介紹了vue 組件基礎(chǔ)知識(shí)的相關(guān)資料,幫助大家更好的理解和使用vue的組件,感興趣的朋友可以了解下
    2021-01-01
  • Vue Element前端應(yīng)用開發(fā)之根據(jù)ABP后端接口實(shí)現(xiàn)前端展示

    Vue Element前端應(yīng)用開發(fā)之根據(jù)ABP后端接口實(shí)現(xiàn)前端展示

    本篇著重介紹基于ABP后端接口信息,實(shí)現(xiàn)對(duì)前端界面的開發(fā)工作。
    2021-05-05
  • vue二選一tab欄切換新做法實(shí)現(xiàn)

    vue二選一tab欄切換新做法實(shí)現(xiàn)

    這篇文章主要介紹了vue二選一tab欄切換新做法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue項(xiàng)目中使用fetch的實(shí)現(xiàn)方法

    vue項(xiàng)目中使用fetch的實(shí)現(xiàn)方法

    這篇文章主要介紹了vue項(xiàng)目中使用fetch的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解Vue Elementui中的Tag與頁(yè)面其它元素相互交互的兩三事

    詳解Vue Elementui中的Tag與頁(yè)面其它元素相互交互的兩三事

    這篇文章主要介紹了詳解Vue Elementui中的Tag與頁(yè)面其它元素相互交互的兩三事,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • 詳解vue-class遷移vite的一次踩坑記錄

    詳解vue-class遷移vite的一次踩坑記錄

    本文主要介紹了vue-class遷移vite的一次踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Vue.js?模板語(yǔ)法和數(shù)據(jù)綁定

    Vue.js?模板語(yǔ)法和數(shù)據(jù)綁定

    這篇文章主要介紹了Vue.js?模板語(yǔ)法和數(shù)據(jù)綁定,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • vue中組件傳值的常見方式小結(jié)

    vue中組件傳值的常見方式小結(jié)

    在 Vue.js 中,組件之間的數(shù)據(jù)傳遞是一個(gè)常見的需求,Vue 提供了多種方法來實(shí)現(xiàn)這一目標(biāo),包括 props、全局事件總線、消息的訂閱與發(fā)布等,下面我們就來學(xué)習(xí)一下這些方法的具體實(shí)現(xiàn)吧
    2023-12-12
  • Vue子組件監(jiān)聽父組件值的變化

    Vue子組件監(jiān)聽父組件值的變化

    這篇文章主要介紹了Vue子組件監(jiān)聽父組件值的變化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 淺析Vue中渲染函數(shù)的使用

    淺析Vue中渲染函數(shù)的使用

    在Vue中,渲染函數(shù)是一種用于動(dòng)態(tài)生成組件的函數(shù),可以將組件的模板代碼編寫為JavaScript代碼,并在運(yùn)行時(shí)進(jìn)行渲染,下面我們就來看看它的具體用法吧
    2023-08-08

最新評(píng)論