最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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中直接寫引入組件之外,我們還可以通過(guò)自己寫一個(gè)ts文件,然后在main.ts引用它,來(lái)達(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è)全局組件

通過(guò)循環(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 => {
      // 通過(guò)循環(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)入,那么有沒(méi)有一種辦法就是。我讀取某一個(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文件所在的目錄,具體看下面的截圖說(shuō)明即可

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é)尾的文件

通過(guò) 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)。只不過(guò)這里是動(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.js雙向綁定實(shí)現(xiàn)原理詳解

    Vue.js雙向綁定實(shí)現(xiàn)原理詳解

    這篇文章主要為大家詳細(xì)介紹了Vue.js雙向綁定實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vue中el-select中多選回顯數(shù)據(jù)后沒(méi)法重新選擇和更改的解決

    vue中el-select中多選回顯數(shù)據(jù)后沒(méi)法重新選擇和更改的解決

    本文主要介紹了vue中el-select中多選回顯數(shù)據(jù)后沒(méi)法重新選擇和更改解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Vue中使用Echarts可視化圖表寬度自適應(yīng)的完美解決方案

    Vue中使用Echarts可視化圖表寬度自適應(yīng)的完美解決方案

    這篇文章主要介紹了Vue中使用Echarts可視化圖表,寬度自適應(yīng)解決方案,我的解決方案是,在放置Echarts的容器(div)外層再套一層容器(div),外層容器寬度固定設(shè)置手機(jī)屏幕寬,感興趣的朋友跟隨小編一起看看吧
    2022-09-09
  • 詳解Vue中如何進(jìn)行分布式日志管理與日志分析

    詳解Vue中如何進(jìn)行分布式日志管理與日志分析

    在現(xiàn)代應(yīng)用程序中,日志是一項(xiàng)重要的功能,用于幫助開(kāi)發(fā)人員和運(yùn)維人員了解應(yīng)用程序的行為并進(jìn)行故障排除,本文將介紹如何在Vue應(yīng)用程序中實(shí)現(xiàn)分布式日志管理和日志分析功能,感興趣的可以了解一下
    2023-06-06
  • element的表單元素使用總結(jié)

    element的表單元素使用總結(jié)

    表單元素挺多的,本文主要介紹了element的表單元素使用總結(jié),主要包括文本框類、選擇類、其他類,有一定的參考價(jià)值,感興趣的可以了解一下
    2021-06-06
  • fetch網(wǎng)絡(luò)請(qǐng)求封裝示例詳解

    fetch網(wǎng)絡(luò)請(qǐng)求封裝示例詳解

    這篇文章主要介紹了fetch網(wǎng)絡(luò)請(qǐng)求封裝的示例內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • Vue 中 filter 與 computed 的區(qū)別與用法解析

    Vue 中 filter 與 computed 的區(qū)別與用法解析

    這篇文章主要介紹了Vue 中 filter 與 computed 的區(qū)別與用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • vue+elementUI的表格最后一行合計(jì)自定義顯示方式

    vue+elementUI的表格最后一行合計(jì)自定義顯示方式

    這篇文章主要介紹了vue+elementUI的表格最后一行合計(jì)自定義顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Ant Design Vue如何生成動(dòng)態(tài)菜單a-menu

    Ant Design Vue如何生成動(dòng)態(tài)菜單a-menu

    這篇文章主要介紹了Ant Design Vue如何生成動(dòng)態(tài)菜單a-menu問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • vue中如何使用elementUI表格動(dòng)態(tài)行合并

    vue中如何使用elementUI表格動(dòng)態(tài)行合并

    這篇文章主要介紹了vue中如何使用elementUI表格動(dòng)態(tài)行合并,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評(píng)論

青铜峡市| 大理市| 巍山| 宁远县| 桐梓县| 延安市| 瓮安县| 闵行区| 花莲市| 巴林右旗| 阜南县| 策勒县| 昌图县| 星子县| 新建县| 洛宁县| 东光县| 丘北县| 南昌市| 将乐县| 营口市| 南投县| 腾冲县| 绥芬河市| 江源县| 水富县| 修武县| 宜丰县| 呼图壁县| 阳朔县| 新宾| 醴陵市| 绥滨县| 陆川县| 新丰县| 喀什市| 交城县| 金湖县| 遂平县| 静安区| 达拉特旗|