价值并不总是角
问题描述:
解释我有一个控制器,像这样:价值并不总是角
controller.things = ['a', 'b', 'c'];
controller.loading = true;
controller.responses = [];
controller.handlePromises = function(){
var promises = [];
for(promiseIndex = 0; promiseIndex < controller.things.length; promiseIndex++) {
promises.push(controller.promise(things[promiseIndex]);
}
Promise.all(promises).then(function success(response){
for(responseIndex = 0; responseIndex < response.length; responseIndex++){
responses.push(response[responseIndex].data);
}
controller.loading = false;
}
}
controller.promise = function(value){
//Some $http request to Database;
}
controller.handlePromises();
在controller.things
的东西量取决于用户。连接到这是做一个简单的HTML页面如下:
<div ng-if="!controller.loading">
<div ng-repeat="response in controller.responses">
{{response}}
</div>
</div>
我的问题是,有一个50/50的机会的内容变得可见,其他时间我可以看到,该承诺具有调试器已解决并且加载设置为false,但ng-if一直隐藏内容。即使显示内容,ng-repeat很有可能说controller.responses
仍然是空的。
无论需要多长时间,我如何保证ng-if在承诺解决时接受controller.loading
为假?此外,ng-repeat的相同问题有时也不会在controller.responses
中看到值。我考虑过超时,但这不是理想的解决方案,因为它可能需要半秒到十秒的时间。
答
问题是您正在使用Promise.all
而不是$q
。 $q
是由Angular团队构建的Promise库,它将为您执行$digest
周期。
$q.all(promises).then(function success(response) {
for (responseIndex = 0; responseIndex < response.length; responseIndex++) {
responses.push(response[responseIndex].data);
}
controller.loading = false;
});
是否所有承诺成功吗?您的Promise.all(...)只有成功回调。我猜想,如果一个或多个承诺失败,你最终不会成功回调。 – mortb
该示例假定所有承诺都已成功解决,但实际的完整实现有故障回退。 – Patrick
您是否尝试使用$ digest.apply()或$ scope.apply()。很可能UI不会更新范围已更改。 –