我知道"&"
绑定用于将方法(表达式)传递给指令隔离范围,因此指令将能够在需要时执行它。
很多时候,我需要将相同的表达式从我的主控制器“传递”到嵌套指令(2-3 级),深度超过一层。这就是为什么我自己不喜欢"&"
为此目的使用。对我来说,使用绑定发送“回调”"="
效果更好。但这不是一个问题。
问题是:除了传递函数之外
,我还可以使用什么?"&"
我可以有这样的东西:my-directive-click="clickCount +=1"
?
我知道"&"
绑定用于将方法(表达式)传递给指令隔离范围,因此指令将能够在需要时执行它。
很多时候,我需要将相同的表达式从我的主控制器“传递”到嵌套指令(2-3 级),深度超过一层。这就是为什么我自己不喜欢"&"
为此目的使用。对我来说,使用绑定发送“回调”"="
效果更好。但这不是一个问题。
问题是:除了传递函数之外
,我还可以使用什么?"&"
我可以有这样的东西:my-directive-click="clickCount +=1"
?
&
更多的是允许您处理表达式,更重要的是(在我看来)允许您将参数放入调用父级的范围。
例如,如果您有:
scope: {
something: '&'
}
然后在那个指令模板中你可以这样做:
<select ng-model="selection" ng-change="something({$item: selection})" ...>
该指令的调用者/用户可以在传递给的表达式中访问 $item something
,即 $item 被放置在其范围内。
例如
<my-dir something="myOwnVar = $item + 1"></my-dir>
这是一个带有示例的 plunker,包括链接(&
表达式的多个嵌套调用):
http ://plnkr.co/edit/j4FCBIx0FVz4OT0w50bU?p=preview
实际上,这&
意味着单向数据绑定。
=
双向数据绑定也是如此,这意味着对指令所做的更改将持续到原始对象。
@
只是一个字符串。
而且&
很特别。问题是它为您的值创建了一个 getter,在调用函数的情况下,getter 实际上调用了该函数。我倾向于在 DDO 上这样做:
.directive('myDirective', function() {
return {
restrict: 'E',
scope: {
getParameters: '&?params'
}
因此,通过这种方式,绑定到scope
is的值getParameters
(很明显是一个 getter),但在指令元素上,您只会将其称为params
:
<my-directive params="ctrl.params">
尽管您的问题含糊不清,即使您可以按照您的要求进行操作,但我认为最好在指令中执行此操作,而不是按照您建议的方式。
我希望这会有所帮助。