0

私はAngularJsの初心者なので、何か重要なことを見逃しているかもしれませんが、コントローラー間で情報を共有したい場合は、代わりにサービスを使用できると思います.

コントローラーはビュー (html) について認識すべきではありませんが、考えてみれば、次のようにネストされたコントローラーを使用すると、次のようになります。

<div ng-controller="ControllerA">
...
   <div ng-controller="ControllerB"> 
   ...
   </div>
</div>

ControllerB が ControllerA スコープを使用する場合、ControllerB を ControllerA およびビュー (html) と結合するだけです。これは、ここの html がコントローラー内のスコープの階層を決定するためです。すべての html を新しいデザインに変更する場合たとえば、html 構造は次のように変更されます。

<div ng-controller="ControllerA">
...
</div>

<div ng-controller="ControllerB">
...
</div>

次に、ビューのこの変更は ControllerB ロジックにも影響を与えます (ControllerA スコープを使用するため)。そのため、AngularJS のネストされたコントローラーはアンチパターンのように見えますが、何かが欠けている可能性があります。

AngularJs でネストされたコントローラーを使用するのが正しい場合とそうでない場合は?

使用例をいくつか教えてください。

ありがとう

4

1 に答える 1

1

あなたの例では、コントローラー階層はHTMLレイアウトの副作用です。それは本当です。

ただし、関数に固有の場合は 2 つ考えられます。1 つは、たとえば ng-repeat ディレクティブです。子スコープは親から継承します。親スコープで子をセットとして制御する必要があるため、これは正しいことです。

2 つ目は論理単位です。言い換えると、製品のページ セットを構築する場合、親の製品コントローラを作成し、次に製品の選択、製品の追加、製品の削除のための子コントローラを作成します。これは、ビューの実装に依存しない論理関係です。ただし、副作用なしで複数の方法で UI を設定できるようになったため、これを行うことは理にかなっています。たとえば、デフォルトでリスト付きのグリッド ビューを使用してから、ルートを使用して詳細ビューに遷移することができます。これは機能します。または、同じページの左側に選択項目を配置し、右側に詳細を配置することもできます。同じことが機能します。これらのコントローラーをテストして調整することはできますが、論理的な継承はありますが、UI の実装方法に階層を課すことはありません。

無関係なコントローラーがあるが、共通の「グローバルな懸念」または「アスペクト」と呼ばれるものがある場合は、サービスを使用し、コントローラーの階層を心配する代わりに、そのサービスとの対話に対処します。

于 2013-09-05T23:10:55.330 に答える