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
がコントローラにダブルバインドされていることである$は、(適用)コールバックのため、変更が拾われることはありません$ digestサイクルがトリガーされないので、ng-showによって実行されます。これはコントローラに$ scopeを挿入して$ applyを呼び出さなければならないので、非常に煩わしいことですが、最初は$ scopeに頼るという目的を破ります。
$q
サービスでTPApiをカプセル化し、コールバックが発行されたときに$ digestサイクルが呼び出されるようにする方法があると思います。しかし、ある時点で$q
の代わりに新しいネイティブのPromise
APIを使用するように移行したいのであればどうしたらよいでしょうか?
$ digestをトリガーすることなくこれを行うにはスマートな方法がありますか?または、$ scopeと$ digestのために角度1に本質的に欠陥がありますか?
この動作はフィドルで再現できますか?あなたの例は正常に動作し、モデルはAPIコールの後に更新されます。 – gyc
ここに行く:https://jsfiddle.net/xgcphw0m/4/使用されたジオロケーション。 $ qまたは$ httpのような角度サービスを使用していれば、それは動作しますが、$ applyでコールバックをラップするためです。それは私が避けたいものです。 –
残念ながら、私はes6についてよく分かりません。 – gyc