AngularJS 1.5组件

时间:2016-07-07 20:29:23

标签: javascript angularjs angularjs-1.5

在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本身存在缺陷?

1 个答案:

答案 0 :(得分:0)

由于您正在调用第三方API,因此您必须让angular更新并识别到达的新数据。如果你不想使用$ scope,你可以用$ timeout包装你的代码(这会触发你的摘要周期)

function CompController(TPApi) {
    let self = this;
    this.endCallback = false;
    TPApi.call(data, () => $timeout(() => this.endCallback = true, 0));
}