在 AngularJS 1.5 之前,在指令或视图中,确保在从第三方异步回调发出更改时(使用 $digest 循环)获取更改的方法是在$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>'
})
这里的问题ng-show是双重绑定到控制器,但不使用 $scope.$apply() 进行回调,ng-show 不会拾取更改,因为不会触发 $digest 循环。这非常令人烦恼,因为我必须在控制器中注入 $scope 并调用 $apply,但这首先违背了依赖 $scope 的目的。
我想一种方法是将 TPApi 与$q服务一起封装,从而确保在发出回调时调用 $digest 循环。但是,如果在某个时候我想过渡到使用新的本机PromiseAPI 而不是$q?
有没有一种聪明的方法可以在不触发 $digest 的情况下做到这一点,或者 angular 1 由于 $scope 和 $digest 而存在固有缺陷?