代码之家  ›  专栏  ›  技术社区  ›  nam vo

Vue:如何检测所有组件何时完成加载?

  •  1
  • nam vo  · 技术社区  · 2 年前

    我想在所有组件仍在加载时显示一个加载图标,当所有组件都完成加载数据时,它将消失。

    是否有任何全局方法可以知道何时加载了所有组件,而不是手动逐个检查组件?

    布局:

    <template>
      <LoadingBar :loadingBar="loadingBar" />
      <NuxtLayout name="root">       
          <slot />       
      </NuxtLayout>
    </template>
    

    页面:使用上述布局

    <template>
     <LazyComponent1 v-cloak /> => run its own data
     <LazyComponent2 v-cloak /> => run its own data
     <LazyComponent3 v-cloak /> => run its own data
    </template>
    
    <style lang="sass">
    [v-cloak] 
      display: none
    </style>
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Ahmed Sbai    2 年前

    您可以在应用程序组件中执行以下操作:

    export const eventBus = new Vue();
    //...
    export default {
      data() {
        return {
          loadingCount: 0, // Number of components still loading
          loadingBar: false // Show/hide the loading bar
        };
      },
      created() {
        eventBus.$on('componentLoading', () => {
          this.loadingCount++;
          this.loadingBar = true;
        });
    
        eventBus.$on('componentLoaded', () => {
          this.loadingCount--;
          if (this.loadingCount === 0) {
            this.loadingBar = false;
          }
        });
      }
    }
    

    然后从导入的每个子组件 eventBus 那你就去吧 eventBus.$emit('componentLoading') 加载数据之前,以及 eventBus.$emit('componentLoaded'); 加载数据时基于 loadingBar 显示/隐藏加载栏