私が作業しているプロジェクトではevents
という$rootScope
の変数があります。コントローラに注入した後、コントローラで$rootScope.events
を使ってこれにアクセスできます。設定時にAngularJSがrootScope変数を取得する
サービスで$rootScope
変数にイベントが設定されるまでに時間がかかることがあります。次に、変数の最初のイベントからIDを必要とする新しい機能を追加します。問題は、$rootScope.events
が設定される前に呼び出されていることです。私は$rootscope.events
が設定された後、私のコントローラでメソッドを呼び出す方法を理解できません。以前は$watch
を使用していましたが、この変数では動作しないようです。コードは、私が試した:
$scope.$watch('$rootScope.events', function() {
if ($rootScope.events.length > 0) {
getDetails(); // function I want to call after $rootscope.events is set
$log.debug($rootScope.events); // debugging line
}
});
を、私はそれが無限ループになってきた避けるために$rootScope.events.length > 0
を追加しました。これが必要かどうか確かめないでください。この機能を追加するためのソリューションはありますか?この時計のようなもの?または私は何か間違ったことをしましたか?
私はちょうど私のコントローラで$scope
と$rootScope
を注入し、その後$log.debug()
セット変数で呼び出さなければならないとして、私はこの記事に追加したあなたはより多くのコードを必要としないと思います。現在、空の変数を返します。私が間違っている場合は、コメントに私に知らせてください。
私はすっごく近くでした。そしてこれははるかに理にかなっています。ありがとうございました! – JeroenE
@JeroenEこれは '$ scope。$ watch'を使って動作するはずです。これがコントローラに置かれ、現在のルート/状態が変更された場合、$ rootScopeからのウォッチはおそらくクリーニングされません。このコードを渡すたびに1つ以上の時計を放置すると、アプリケーションが遅くなります。 – Walfrat
@JeroenEは '$ scope。$ watch( '$ root.events'、...)'を使ってその問題を解決できます。 – bugged87