在AngularJS 1.5之前,在指令或視圖中,確保更改的方法將由角度(使用$ digest循環)從第三方異步回調發出時拾取將在$scope.$apply()
調用中運行您的代碼。AngularJS 1.5組件中的第三方異步回調組件
就我所知,其中的組件就是擺脫$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
是雙重綁定到控制器,但沒有使用$範圍$申請()回調,變化不會回升因爲$摘要循環不會被觸發,所以由ng顯示。這非常麻煩,因爲我不得不在控制器中注入$ scope,並調用$ apply,但是這首先破壞了依賴$ scope的目的。
我想一種方法是將TPApi與$q
服務封裝在一起,從而確保在發出回調時調用$ digest循環。但是如果在某個時候我想轉換到使用新的本地Promise
API而不是$q
?
有沒有一種聰明的方式來做到這一點,而不觸發$摘要或角1因爲$範圍和$摘要只是固有的缺陷?
你能在小提琴中重現這種行爲嗎?您的示例行爲正常,模型在api調用後更新。 – gyc
這裏你去:https://jsfiddle.net/xgcphw0m/4/使用地理位置。如果你已經使用了像$ q或$ http這樣的角度服務,它將起作用,但這是因爲它們用$ apply包裝了回調。這就是我想要避免的。 –
不幸的是,我不太瞭解es6。 – gyc