4

最も優先度の高いディレクティブには分離スコープがなく、優先度の低いディレクティブには分離スコープがある 2 つのディレクティブがある要素に対して、angular が分離スコープを作成しないのは正しいですか?

2 つのディレクティブとコントローラーを持つ次のプランカーがあります。

http://plnkr.co/edit/zEnMH6h0ILURHSgx0DLX?p=preview

コンソールを開くと、ディレクティブとコントローラーのスコープのログが表示されます。noIsoScope ディレクティブには分離スコープがなく、優先度は 1 です。isoScope スコープ ディレクティブには分離スコープがありますが、優先度は 0 です。各ディレクティブを個別に使用すると、すべてが例外として機能します。両方を一緒に使用すると、 isoScope ディレクティブは、それ自体ではなくコントローラースコープを使用していることを示しています (ログに基づいているため、同じ $id を持っています)。

要素で複数のディレクティブを使用しているときはいつでも、そのうちの 1 つに分離スコープがある場合、それが最高の優先度を持つ必要があることを確認する必要がありますか?

4

1 に答える 1

1

短い答えはい

分離スコープと親スコープの両方を必要とする 2 つのディレクティブを持つことは意味がありません。アイデアは、ディレクティブが互いにどのように機能するかを考えることです。親スコープ ディレクティブが持つスコープが分離スコープである場合、親スコープ ディレクティブはどのように正しく機能しますか?

angularチームは、この状況で警告を出さないことにしたと思います(バグの可能性があります)。

  • 優先度の低い方が分離スコープを必要とする場合、つまり、親スコープからのデータの厳密な要件があることを意味します
  • より高い優先度がスコープを必要としない場合、それは親スコープを継承し、テンプレートでそのデータを潜在的に使用することを意味します。

これはキャッチ 22 の状況です。分離されていないという事実に依存する可能性があるため、非分離ディレクティブが分離スコープを使用することは意味がありません。同時に、Isolate ディレクティブは、Isolate であるという事実に依存する可能性が最も高いです。

Igor Minarから、彼は複数の分離スコープについて話していますが、基本的には同じ問題です:

テンプレートに裏打ちされた再利用可能なコンポーネントを作成する場合は、分離スコープを使用することをお勧めします。複数のディレクティブを一緒に構成する場合は、1 つのディレクティブを (テンプレートを使用して) メインのディレクティブにし、他のディレクティブは単なるヘルパー ディレクティブ (一部のプログラミング言語のトレイトやミックスインのようなもの) になるように設計する必要があります。

于 2013-07-02T21:07:48.687 に答える