【发布时间】:2018-12-09 05:35:49
【问题描述】:
我们一直在努力为将来从 AngularJS 迁移到 Angular 做尽可能多的准备工作。我的理解是我们要尽可能避免使用 $scope。但是,我发现我正在执行 Promise.all() 并且我无法弄清楚如何在没有 $scope.$apply() 的情况下更新 DOM。这里以一些伪代码为例。
Angular 1.7.x 问题:当 Promise.all() 解析时,如何让 DOM 呈现新值?大街上的消息是我们不应该使用 $scope.$apply(),但这就是我能想到的...
export class FooController {
constructor(FooService, $scope) {
this.fooService = FooService;
this.$scope = $scope;
}
$onInit() {
this.data = [];
this.requests[...]; // holding some requests
this.updateData();
}
updateData() {
let promises = [];
this.requests.forEach(i => promises.push(this.fooService.get(i)));
Promise.all(promises)
.then(res => {
this.data = res;
this.$scope.$apply();
})
}
}
FooController.$inject = ['FooService', '$scope'];
export const fooComponent = {
templateUrl: templateUrl,
controller: FooController
}
【问题讨论】:
-
使用 $q.all(),AngularJS 承诺会为你调用 $scope.$apply。
标签: angularjs promise angularjs-scope angular-promise