ボタンを作成するためのangular.jsディレクティブがあります(ホバークラス、左右のアイコンなど)。ボタンの左アイコンと右アイコンの自動バインドを使用して、scope: { uiButtonIconLeft: '@', uiButtonIconRight: '@' }
これらの値を親スコープのデータにバインドできるようにしています。ただし、これにより、angularjsは「分離」スコープを作成します。つまり、次のような状況でディレクティブを使用しても機能しません。
<div ng-controller='someController'>
<a ng-repeat='thing in things'
ui-button
ui-button-icon-left='{{thing.icon}}'
ng-click='someMethodTheControllerPutOnTheScope(thing.id)'
>
I don't work, don't bother clicking me
</a>
</div>
代わりに、これを行う必要があります。
<div ng-controller='someController'>
<a ng-repeat='thing in things'
ui-button
ui-button-icon-left='{{thing.icon}}'
ng-click='$parent.someMethodTheControllerPutOnTheScope($parent.thing.id)'
>
Holy leaky abstractions, Batman, it works!
</a>
</div>
私の質問は:これは慣用的なものですか?このようにすべきですか?私はそれを間違っていますか?私たちのヒーローは、マークアップの余分な、反復的な、迷惑な余分なものを一掃できます$parent.<whatever>
か?
編集
attributes.$observe(...)
私がボタン「ウィジェット」に決めた答えは、分離スコープの使用を避け、スコープを介してバインドするのではなく、を介して左右のアイコンの属性値を監視することです。