さて、シナリオを設定しましょう。
シナリオ: コンテンツ コントローラーがあります。このコンテンツは、写真、ブログ投稿など、何でもかまいません。これで、このコンテンツの html 内に、コメント コントローラーができました。CommentController の仕事は、コメントの読み込み、コメントの送信の許可などです。ただし、このコントローラーの機能は、その親に依存します。結局のところ、親がいない場合、あなたは何についてコメントしていますか?
問題: そうは言っても、問題を紹介しましょう。ContentController は、サーバーにデータを入力するために情報を要求する必要があり、その一部は一意の ID です。url-state を一意の ID として使用するなど、この問題には別の方法がありますが、これがこの問題を説明するために思いつく最善の方法です。
一意の ID がサーバーから ContentController に読み込まれます。次に、$scope にこの ID と実際のコンテンツを設定します。一方、CommentController はそれ自身のリソースをロードしたいと考えていますが、そのリソースのロードはすべて、親 ContentController のロードされたデータに依存しています。両方のコントローラーが同時にロードされるため、子 CommentController の実行の実行を通知または遅延させる方法が必要です。そうしないと、存在しない unique-content-id についてサーバーからコメントを要求しようとします。
質問: これは非常に基本的な問題で、多くの明白な答えがあります。しかし、私の質問は、このようなAngularはどのように行われるのでしょうか? 「角度のある方法」に最適な解決策は何でしょうか。
最も明白な方法は、単純にイベントのクリエーター/コンシューマーを持つことです。Angular には、これに対処する複数の方法があります。サービス、$scope.promise = promise
、解決の約束、$scope.$broadcast
など。しかし、私には、この種のイベント化されたデザインは、ぎこちなく感じられます。私の ContentController が、その中にあるかもしれないし、ないかもしれないものによって行き詰まらないことを望みます。
別の方法は$watch
、 など、必要な変数のスコープにすることです$scope.$watch('content.uid', function(newValue) {})
。これは、上記のソリューションよりも良い感じで、結合が少ないです。まだ完璧ではありません..少なくとも私には。
最善の解決策は、達成方法がわからないものだと思います。コントローラーができるようにしたいと思います..遅延、子コントローラー(親)が非同期の何かをしている場合。これは単純さを暗示しているため、イベントよりも優れていると思います。これは基本的にはイベント ブロードキャストですが、「イベント」は 1 つしかないため、構文がきれいになることを願っています。不完全または完全です。ただし、上記のイベント化されたメソッドのいずれかを使用せずに、このようなことが可能かどうかはわかりません..これを達成する方法はありますか?
とにかく、これは、数週間前に Angular を学び始めて以来、私の頭の中で転がっている問題です。この件に関する洞察は大歓迎です。
読んでくれてありがとう!