私は、AppCtrlというメインのctrを使用するアプリケーションを持っています。これは、グローバル変数、ヘルパー、データを共有するために使用します。コントローラーがロードされる前の角度実行条件
私は各ビューに1つのコントローラがあるので、ユーザがページを更新したり、初めて自分のアプリに入るたびに、特定の順序でタスクを実行する必要がありますが、それらは分離されたコントローラにあります。
たとえば、AppCtrl
私のデータベースからユーザデータをロードする必要がありますが、ルートまたはセカンダリコントローラが必要です。HomeCtrl
に電話をかけることができます。 info AppCtrl
から。
私はコントローラ間でデータを共有するために$scope
varを使用しています。
したがって、AppCtrl
実行の終了が処理を開始するまで、HomeCtrl
が待機するようにするにはどうすればよいですか。
EDIT:
私は私のHomeCtrl
の私のAppCtrl
と例を共有するために、ペーストビン、http://pastebin.com/CUtTmKzTを作成しました。分かりやすくするために、私は多くのコンテンツを削除し、いくつかの署名を残すだけで、達成しようとしていることを理解することができます。
もっと良く説明するために、私はすべてのページロード時にいくつかのメソッドを実行して、私のAPIからいくつかのデータを照会し、すべてのコントローラー間で共有したいと思っています。私はこのアプリケーションを大量に使用するため、これを一度だけ行うことができます。ユーザデータは私の$rootScope
上に存在する場合、それはそれがメソッドを呼び出しますない場合
ので、私は、ユーザーがアプリにアクセスした後に呼び出されるメソッドhandleLoginSuccess
を持っている私のペーストビンコード以下、それは、チェックしますこのデータをsetCurrentUser
で処理し、そうでない場合は、このデータをAPIから照会するメソッドgetUserData
を呼び出し、それを処理するために他のメソッドを呼び出します。
ここで角度フレームワークの知識にはいくつかのギャップがあり、非常に難しくなります。まず、HTMLをレンダリングする '$ digest'サイクルは、コントローラがロードする順序には関係しません。第二に。各コントローラはそれ自身の '$ scope 'を持っているので、' $ scope'を使ってデータを共有すると、バグのトラブルシューティングに厄介なことが起こる可能性があります。ディレクティブやコンポーネントを代わりに使用するか、ルーターを使用してビューを管理することを検討してください。 – Claies
@ Claies、データを共有するために指示やコンポーネントを使用する方法の例を教えてください。スコープを使用せずにデータベース間で共有する方法がわからないからです。また、私はhtmlレンダリングについても、メソッドの実行については言及していませんでした。 – Terkhos
シングルトンオブジェクトであるプロバイダ(サービスまたは工場)にデータを共有する方が良いでしょう。ここでは、HTMLに階層的な性質を暗示しようとしているため、ディレクティブとコンポーネントについて言及していますが、コントローラは厳密には厳密には守られていません。 – Claies