我有一个vue.js应用程序,其中有几个子组件,如下所示:
<main-app>
<child-component></child-component>
<child-component></child-component>
<child-component></child-component>
...
</main>
加载页面后,我可以使用ready
挂钩知道组件已完成加载。现在,使用ajax数据填充这些组件,可以通过单击按钮手动更新它们。我可以使用broadcast
和dispatch
方法从每个子组件中获取数据。但我想在用户点击按钮时向用户显示预加载器,并在所有ajax请求完成时隐藏它。为此,我需要知道所有子组件都已完成加载。过去4-5小时我无法做到这一点。谷歌和SO没有多大帮助。
我也尝试过使用jQuery的ajaxStop
,但它似乎不适用于vue-resource。有人可以帮帮我吗?
答案 0 :(得分:0)
我需要做一次类似的事情和我最终做的事情(除了使用v-cloak在vue渲染完成后显示应用程序)跟踪data
中的每个require变量是否已经有数据(或者不是)只有这样,&#34;显示&#34;应用程序(为此我使用内部标志来控制是否显示应用程序或加载消息)。
这与此类似(这使用了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
方法。