4

ディレクティブのドキュメントから、次の2つの方法でスコープを継承すると書かれています。

@または@attr-ローカルスコーププロパティをDOM属性の値にバインドします。DOM属性は文字列であるため、結果は常に文字列になります。属性名が指定されていない場合、属性名はローカル名と同じであると見なされます。スコープのウィジェット定義が与えられた場合:{localName:'@ myAttr'}、ウィジェットスコーププロパティlocalNameは、hello{{name}}の補間値を反映します。name属性が変更されると、ウィジェットスコープのlocalNameプロパティも変更されます。名前は、(コンポーネントスコープではなく)親スコープから読み取られます。

=または=attr-ローカルスコーププロパティと、attr属性の値を介して定義された名前の親スコーププロパティとの間に双方向バインディングを設定します。属性名が指定されていない場合、属性名はローカル名と同じであると見なされます。スコープのウィジェット定義が与えられた場合:{localModel:'= myAttr'}、ウィジェットスコーププロパティlocalModelは、親スコープのparentModelの値を反映します。parentModelへの変更はlocalModelに反映され、localModelへの変更はparentModelに反映されます。

単なるIDであるelementIdを渡したいことを考えると、=elementIdまたは@elementIdを介して渡すことができます。

2つのうちどちらがベストプラクティスと見なされますか?を使用する場合@、したがって属性を使用すると、値を直接取得するよりも遅いDOMから値を取得しますか?

私は正しいですか?助言がありますか?

4

1 に答える 1

8
  • ディレクティブで値を変更する必要がある場合は、=を使用して双方向バインディングを取得します。
  • コードを読んでいる他の人に、一方向のバインディングのみを使用していることを明確にしたい場合は、@を使用してください。
  • リンク関数の値に同期的にアクセスする必要がある場合は、=を使用します(@および$observeの非同期動作に関する注意をここで参照してください)。

あなたの場合、@が最適のようです。(ただし、HTML要素でdirectiveとelementIDを使用する方法の例が役立ちます。)

どちらが遅い/速いかわかりません。

AngularJSのディレクティブスコープの「@」と「=」の違いは何ですか?も参照してください。

于 2013-02-07T20:36:47.027 に答える