親スコープで状態が変化するたびに、ディレクティブ内で関数を実行したい。
これを実現する明白な方法は、イベントブロードキャスト( $ broadcast )とリスナー(- $ on )を使用することです。
$ watchを使用することがイベントブロードキャストに代わるものであるかどうか興味があります。もしそうなら、2つはどう比較されますか?
私の知る限り、監視対象の式は$ digestサイクルごとに評価されます。では、イベントは監視よりも効率的ですか?
$watch
関数は、スコープ上の変数を監視するために使用されます。スコープの継承により、親のスコープ変数も監視することができるため、これが間違いなくユースケースに適しています。あなたが正しく言ったように、$on
はイベントを監視するために使用され、_$broadcast
から子スコープまたは$emit
を親スコープに。これにより、より多くの制御が可能になりますが、監視しておらずリスナーに通知するのを忘れた時点からスコープ変数の更新を取得できるため、コーディング中により多くのミスを引き起こす可能性があります。
スコープ変数を継承しない場合でも、引き続きイベントを使用できます。ただし、大規模なスコープを汚染しないように注意してください。サービスを使用することはオプションである可能性があります。
ディレクティブは有効範囲を取得する(または継承する)ので、$watch
は、ここでははるかにクリーンなオプションです。
ディレクティブに分離されたスコープを持たせたい場合は、引数を属性として渡し、$observe
それら。