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

vue如何動(dòng)態(tài)加載組件詳解

 更新時(shí)間:2022年10月19日 16:12:25   作者:夜叔  
組件是Vue.js最強(qiáng)大的功能之一,組件可以擴(kuò)展HTML元素,封裝可重用的代碼,下面這篇文章主要給大家介紹了關(guān)于vue如何動(dòng)態(tài)加載組件的相關(guān)資料,需要的朋友可以參考下

使用場景:

項(xiàng)目中需要我們根據(jù)不同的業(yè)務(wù)需求呈現(xiàn)不同的業(yè)務(wù)場景,如果業(yè)務(wù)類型簡單還好,直接全部引入判斷即可,但隨著我們代碼的沉積,項(xiàng)目將會(huì)變得很難維護(hù),這時(shí)候我們可以使用動(dòng)態(tài)引入組件的方式來避免這個(gè)問題,首先第一步實(shí)現(xiàn)就是,在vue中,我們?nèi)绾蝿?dòng)態(tài)引入組件?

話不多說,直接上干貨

需要?jiǎng)討B(tài)導(dǎo)入組件的頁面

在這個(gè)頁面引入我們的組件Test

<template>
  <div>
    <Test :data="DemoData"
          :type="type" />
  </div>
</template>
<script>
/** @format */
import Test from '@components/demo/index.vue'
export default {
  components: {
    Test
  },
  data() {
    return {
      type: 'demo2',
      DemoData: 'demoData'
    }
  },

}
</script>

組件庫文件夾格式根據(jù)自己的喜好來設(shè)置

核心組件的代碼:

<template>
  <component :is="component"
             v-if="component" />
</template>
<script>
/** @format */

export default {
  name: 'test',
  props: ['data', 'type'],

  data() {
    return {
      component: null
    }
  },
  computed: {
    loader() {
      return () => import(`@components/demo/demoTemplates/${type}`)
    }
  },
  mounted() {
    this.loader()
      .then(() => {
        this.component = () => this.loader()
      })
      .catch(() => {
        this.component = () =>
          import('@components/demo/demoTemplates/defaultDemo')
      })
  }
}
</script>

這樣就可以動(dòng)態(tài)加載組件了

利用的原理知識是es6新增的inport()函數(shù)

ES2020提案 引入import()函數(shù),支持動(dòng)態(tài)加載模塊。

import()返回一個(gè) Promise 對象。下面是一個(gè)例子。

const main = document.querySelector('main');

import(`./section-modules/${someVariable}.js`)
  .then(module => {
    module.loadPageInto(main);
  })
  .catch(err => {
    main.textContent = err.message;
  });

import()函數(shù)可以用在任何地方,不僅僅是模塊,非模塊的腳本也可以使用。它是運(yùn)行時(shí)執(zhí)行,也就是說,什么時(shí)候運(yùn)行到這一句,就會(huì)加載指定的模塊。另外,import()函數(shù)與所加載的模塊沒有靜態(tài)連接關(guān)系,這點(diǎn)也是與import語句不相同。import()類似于 Node 的require方法,區(qū)別主要是前者是異步加載,后者是同步加載。

使用場景:

(1)按需加載。

import()可以在需要的時(shí)候,再加載某個(gè)模塊。

button.addEventListener('click', event => {
  import('./dialogBox.js')
  .then(dialogBox => {
    dialogBox.open();
  })
  .catch(error => {
    /* Error handling */
  })
});

上面代碼中,import()方法放在click事件的監(jiān)聽函數(shù)之中,只有用戶點(diǎn)擊了按鈕,才會(huì)加載這個(gè)模塊。

動(dòng)態(tài)的模塊路徑

import()允許模塊路徑動(dòng)態(tài)生成。

import(f())
.then(...);

上面代碼中,根據(jù)函數(shù)f的返回結(jié)果,加載不同的模塊。

注意點(diǎn):

import()加載模塊成功以后,這個(gè)模塊會(huì)作為一個(gè)對象,當(dāng)作then方法的參數(shù)。因此,可以使用對象解構(gòu)賦值的語法,獲取輸出接口。

import('./myModule.js')
.then(({export1, export2}) => {
  // ...·
});

上面代碼中,export1和export2都是myModule.js的輸出接口,可以解構(gòu)獲得。

如果模塊有default輸出接口,可以用參數(shù)直接獲得。

import('./myModule.js')
.then(myModule => {
  console.log(myModule.default);
});

上面的代碼也可以使用具名輸入的形式。

import('./myModule.js')
.then(({default: theDefault}) => {
  console.log(theDefault);
});

如果想同時(shí)加載多個(gè)模塊,可以采用下面的寫法。

Promise.all([
  import('./module1.js'),
  import('./module2.js'),
  import('./module3.js'),
])
.then(([module1, module2, module3]) => {
   ···
});

import()也可以用在 async 函數(shù)之中。

async function main() {
  const myModule = await import('./myModule.js');
  const {export1, export2} = await import('./myModule.js');
  const [module1, module2, module3] =
    await Promise.all([
      import('./module1.js'),
      import('./module2.js'),
      import('./module3.js'),
    ]);
}
main();

import()方法詳細(xì)介紹參考:https://es6.ruanyifeng.com/#docs/module

總結(jié)

到此這篇關(guān)于vue如何動(dòng)態(tài)加載組件的文章就介紹到這了,更多相關(guān)vue動(dòng)態(tài)加載組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue源碼之首次渲染過程詳解

    vue源碼之首次渲染過程詳解

    這篇文章主要為大家詳細(xì)介紹了vue源碼之首次渲染過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue3中markRaw示例詳解

    vue3中markRaw示例詳解

    markRaw是將一個(gè)對象標(biāo)記為普通對象,而toRaw是將reactive對象變?yōu)槠胀▽ο?在 Vue 3 中,markRaw 是一個(gè)用于告訴 Vue 的響應(yīng)性系統(tǒng)不要對某個(gè)對象進(jìn)行轉(zhuǎn)換或追蹤其響應(yīng)性的函數(shù),下面給大家介紹vue3中markRaw詳解,感興趣的朋友一起看看吧
    2024-04-04
  • Vue+better-scroll 實(shí)現(xiàn)通訊錄字母索引的示例代碼

    Vue+better-scroll 實(shí)現(xiàn)通訊錄字母索引的示例代碼

    通訊錄字母索引是常用的一種功能,本文主要介紹了Vue+better-scroll 實(shí)現(xiàn)通訊錄字母索引,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 解決VUE中document.body.scrollTop為0的問題

    解決VUE中document.body.scrollTop為0的問題

    今天小編就為大家分享一篇解決VUE中document.body.scrollTop為0的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue實(shí)現(xiàn)移動(dòng)端輕量日期組件不依賴第三方庫的方法

    vue實(shí)現(xiàn)移動(dòng)端輕量日期組件不依賴第三方庫的方法

    這篇文章主要介紹了vue 移動(dòng)端輕量日期組件不依賴第三方庫,需要的朋友可以參考下
    2019-04-04
  • vue頁面使用多個(gè)定時(shí)器的方法

    vue頁面使用多個(gè)定時(shí)器的方法

    這篇文章主要為大家詳細(xì)介紹了vue頁面使用多個(gè)定時(shí)器的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Vue3之Vite中由element?ui更新導(dǎo)致的啟動(dòng)報(bào)錯(cuò)解決

    Vue3之Vite中由element?ui更新導(dǎo)致的啟動(dòng)報(bào)錯(cuò)解決

    這篇文章主要介紹了Vue3之Vite中由element?ui更新導(dǎo)致的啟動(dòng)報(bào)錯(cuò)解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue-cli3項(xiàng)目展示本地Markdown文件的方法

    vue-cli3項(xiàng)目展示本地Markdown文件的方法

    這篇文章主要介紹了vue-cli3項(xiàng)目展示本地Markdown文件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Vue transx組件切換動(dòng)畫庫示例詳解

    Vue transx組件切換動(dòng)畫庫示例詳解

    這篇文章主要為大家介紹了Vue transx組件切換動(dòng)畫庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue 使用插槽分發(fā)內(nèi)容操作示例【單個(gè)插槽、具名插槽、作用域插槽】

    vue 使用插槽分發(fā)內(nèi)容操作示例【單個(gè)插槽、具名插槽、作用域插槽】

    這篇文章主要介紹了vue 使用插槽分發(fā)內(nèi)容操作,結(jié)合實(shí)例形式總結(jié)分析了vue.js使用單個(gè)插槽、具名插槽、作用域插槽相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03

最新評論