在AngularJS 1.5之前,在指令或视图中,当从第三方异步回调发出更改时,确保通过angular(使用$ digest循环)获取更改的方法是在{ {1}}致电。
对于组件,据我所知,想法是摆脱$scope.$apply()
并将模板绑定到组件的控制器。我试图过渡到编写组件而不是视图,而不依赖于$ scope。我们说我有以下代码:
$scope
这里的问题是function CompController(TPApi) {
let self = this;
this.endCallback = false;
TPApi.call(data, () => this.endCallback = true );
}
angular.module('app', []).component('myComp', {
controller: CompController,
template: '<div><span ng-show="$ctrl.endCallback">Callback Called</span></div>'
})
被双重绑定到控制器,但没有使用$ scope。$ apply()进行回调,因此ng-show不会被更改$ digest周期不会被触发。这非常令人烦恼,因为我必须在控制器中注入$ scope并调用$ apply,但这首先打破了依赖$ scope的目的。
我想一种方法是用ng-show
服务封装TPApi,从而确保在发出回调时调用$ digest循环。但是,如果在某些时候我想转换为使用新的原生$q
API而不是Promise
呢?
有没有一种聪明的方法可以在不触发$ digest的情况下执行此操作,或者由于$ scope和$ digest而有角度1本身存在缺陷?
答案 0 :(得分:0)
由于您正在调用第三方API,因此您必须让angular更新并识别到达的新数据。如果你不想使用$ scope,你可以用$ timeout包装你的代码(这会触发你的摘要周期)
function CompController(TPApi) {
let self = this;
this.endCallback = false;
TPApi.call(data, () => $timeout(() => this.endCallback = true, 0));
}