3

いつ、なぜディレクティブ定義で「require」オプションを使用する必要があるかについてのガイドラインを探しています.Angularのほとんどの場合のように、スコープを使用して通信しないのはなぜですか? ディレクティブで突然、スコープに物をアタッチするだけでなく、コントローラー自体を要求するのはどうしてですか?

一般的に言えば、Angular のディレクティブ/コントローラー/スコープ間で通信する方法はたくさんあります -

  • スコープの継承。
  • RootScope が「放出」します。
  • サービス (工場/サービス/プロバイダー)。
  • ディレクティブでコントローラーを要求する。
  • ディレクティブで新しいスコープ/分離スコープ/「通常の」スコープが必要です。
  • もっと?

それらが技術的にどのように機能するかは理解していますが、どれを使用するかを決定するためのガイドラインとは何か、またその理由は明確ではありません。

いくつかの一般的/高レベルのガイドラインに満足しています。ありがとう。

4

1 に答える 1

2

requireは、カスタム フォーム コントロールを作成する場合に特に便利です(セクションコントロールからカスタムを実装する を参照)。つまり、ディレクティブを使用して独自のフォーム コントロールを作成する場合です。ngModelControllerrequire、API/関数を介して多くの既存の機能にアクセスできます。

別の使用例は、AngularJS ホームページのセクションCreate Componentsにあります。ここでは、paneディレクティブがコントローラーrequire: '^tabs'へのアクセスを取得するために使用されます。tabsこれらのコンポーネント/ディレクティブは両方とも分離スコープを作成するため、スコープの継承はオプションではありません。tabsアプリには複数のディレクティブがある可能性があるため、サービスも適していません。したがって、この場合、コントローラーは、paneディレクティブがスコープに影響を与えるための手段として使用されtabsます。つまり、スコープに到達できるようにするためです。を使用しないrequireと、ディレクティブはスコープpaneに到達できません。tabsこれについては、このSOの回答で(写真付きで)詳しく説明します:'this' vs $scope in AngularJS controllers

require対象のコントローラーが同じ要素 (例: ) で定義されているngModelController場合、または階層がある場合 (例: ペイン -> タブ) にのみ使用できます。

于 2013-05-09T14:57:13.483 に答える