我有一个 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(...)
我为我的按钮“小部件”确定的答案是避免使用隔离范围并通过而不是通过范围绑定来观察左右图标的属性值。