2017-04-13 23 views
2

親スコープとmyディレクティブの分離スコープの間に双方向バインディングを設定できますが、ディレクティブの属性に渡さないでください。Angularjsリテラル双方向バインディング

'='は、双方向のバインディングではなく、親のスコープから直接指定された値を取る代わりに、その名前のディレクティブの属性を探して評価し、その結果の値を親スコープの変数名。

'@'は、私が望むのと同じようにリバースバインディングを確立しますが、一方向のみです。

私はAngular.jsがそれを理解するのに十分なほど賢いが運がないことを希望して '= @'を試しました。

非分離スコープ(scope:true)を使用することもできますが、私のコードの中では、分離スコープが必要な技術をいくつか使用しています。

私がしたいことをするための方法はありますか?

答えて

2

モデルがルーズカップリング設計主体に違反しているため、不適切なプラクティスとみなされるディレクティブとステート間のスコープでモデルを渡す。それは、潜在的にディレクティブの再利用性を低下させ、スコープに副作用をもたらし、不明確な動作を引き起こすことを意味します。同様の理由は、悪い習慣とみなされるJavaScriptの世界的な状態についても話しています(ただし、まれなケースや特定のケースではまだ利用可能です)。

ただし、一方向バインドの@属性を詳しく見てみることをおすすめします。実際には、値を前後に渡してディレクティブ側でコントロールを維持する方法を提供するためです。用語と混同しないでください:)テンプレートで

// in directive 
var theValueReturnsByController = scope.myOneWayAttr({theValuePassedToController: 1}); 

alert(theValueReturnsByController === 2); 

// in controller 
scope.oneWayAttrHandler = function(theValueReceivedFromDirective) { 
    theValueReturnedToDirective = theValueReceivedFromDirective + 1; 
    return theValueReturnedToDirective; 
}; 

<my-directive my-one-way-attr="oneWayAttrHandler(theValuePassedToController)"></my-directive> 
0

直接呼び出すことができれば、悪い設計になります。なぜそれを束縛に通さないのですか?あなたは明示的にそのメソッドを使用します。

+0

私は誰かが股関節を言うだろうと予想しました。さて、ここに答えがあります:これは、冗長な定型コードを書いてしまうためです。 Angular.jsの作者が、非角の練習であるとみなした場合、非単離スコープを使用するオプションを残さなかったと思います。 – vdudouyt

関連する問題