如何知道何时加载所有子组件 vue.js

How to know when all child components are loaded in vue.js

我有一个 vue.js 应用程序,其中有几个像这样的子组件:

<main-app>
   <child-component></child-component>
   <child-component></child-component>
   <child-component></child-component>
...
</main>

当页面加载时,我可以使用 ready 钩子来知道组件加载​​完成。现在,这些组件使用 ajax 数据填充,并且可以通过单击按钮手动更新它们。我可以使用 broadcastdispatch 方法从每个子组件获取数据。但是我想在 s/he 单击按钮时向用户显示预加载器,并在所有 ajax 请求完成后隐藏它。为此,我需要知道所有子组件都已完成加载。我在过去的 4-5 小时内无法做到这一点。 Google 所以并没有太大帮助。

我也尝试过使用 jQuery 的 ajaxStop 但它似乎不适用于 vue-resource。谁能帮帮我?

我需要做一次类似的事情,最后我做了什么(除了使用 v-cloak 在 vue 渲染完成后显示应用程序)是跟踪 data 中的每个 require 变量是否已经有数据(或不),然后才 "display" 应用程序(为此我使用了一个内部标志来控制是显示应用程序还是加载消息)。

与此类似(使用 underscore.js):

var app = new Vue({
    el: 'body',
    data: {
        data1: [],
        data2: [],
        data3: []
    },
    ready: function() {
        this.showApp();

        // Data 1
        $.getJSON('/path-to/data1', function(data) {
            app.$set('data1', data);
            app.showApp();
        });

        // Data 2
        $.getJSON('/path-to/data2', function(data) {
            app.$set('data2', data);
            app.showApp();
        });

        // Data 3
        $.getJSON('/path-to/data3', function(data) {
            app.$set('data3', data);
            app.showApp();
        });
    },
    methods: {
        showApp: function() {
            // Check if all data was loaded
            var requiredData = _.every(['data1', 'data2', 'data3'], function(el) {
                return _.size(this[el]) > 0;
            }, this);

            // If it was, enable the app
            if (requiredData) {
                $(this.$els.loading).hide();
                $(this.$els.app).fadeIn();
            }
        }
    }
});

由于您使用的是组件,因此您必须使用事件来触发主应用程序上的 showApp 方法。