この種の決定は、まずあなたの懸念を分離しようとする観点からなされるべきです。したがって、親スコープでメソッドを呼び出すことを排除する必要があります。このディレクティブは、親についてあまりにも多くを知っていなければなりません。
次に、目的を検討します。コールバックは定義によるメソッドです。 &
は、親スコープのコンテキストで式を評価し、双方向バインディングは変数名にすぎません。 &
はlotより強力であり、あなたの指示のユーザーにより柔軟性を与えます。確かに、彼らはこの、あなたの例のように行うことができます:
<my-dir cb="callMe()"></my-dir>
をしかし、彼らはまた、これを行うことができます:
<my-dir cb="myVar = false"></my-dir>
を我々は変数の名前を渡す必要はありません - それは任意のです AngularJS expression。したがって、コンポーネントのユーザーは、あなたのイベントに合った方法で自由に対応することができます。驚くばかり!
しかし、指示文は状態の変化に反応することもできます。たとえば、あなたが条件をチェックできます。
<my-dir cb="myVar"></my-dir>
そしてmyVar
を任意の値に評価することができ、あなたのディレクティブは認識して、いつでもこれを変更し、それに応じて反応させることができます。 変数を共有する代わりに、という表現を共有しています。この場合、双方向バインディングが機能しますが、ディレクティブがその変数を変更しない(そして、そうでなければならない)場合、なぜ双方向バインディングが必要ですか?
ただし、変数である必要はありません。 trueまたはfalseと評価される式はどうですか?
<my-dir cb="myVar == myOtherVar"></my-dir>
当社のディレクティブは、親スコープが値に到達したかを気にする必要はありません - 値が最終的あるものだけ。
親スコープでディレクティブに反応したり、ディレクティブが親に反応したりするために使用できます。すべて柔軟な表現です。きちんとした
したがって、=
はデータバインディングを保証するためのものです。ディレクティブが使用されたスコープとディレクティブ自体が特定の変数に同期していることを保証します。&
を使用すると、親スコープのコンテキストで式を評価したり、ディレクティブまたは親スコープのいずれかで式を評価したり、潜在的に複雑な状態の変化に反応することができます。
ありがとう、これは私には明らかです。式を評価し、親スコープにバインドします。 – Jason