我知道"&"
绑定用于将方法(表达式)传递给指令隔离范围,因此指令将能够在需要时执行它。
很多时候,我需要将来自主控制器的相同表达式(多个深度)传递给嵌套指令(2-3级)。这就是我自己的原因,我不喜欢为此目的使用"&"
。对我来说,使用"="
绑定发送“回调”的效果要好得多。但这不是一个问题。
问题是:
为什么,除了传递函数之外我还可以使用"&"
?
我可以这样:my-directive-click="clickCount +=1"
吗?
答案 0 :(得分:1)
&
is more about allowing you to deal with expressions, and more importantly (in my eyes) allows you to place parameters into the calling parent's scope.
For instance if you have:
scope: {
something: '&'
}
and then in that directives template you could do:
<select ng-model="selection" ng-change="something({$item: selection})" ...>
The caller/user of this directive than can ACCESS $item in the expression passed to something
, i.e. $item is placed on its scope.
e.g.
<my-dir something="myOwnVar = $item + 1"></my-dir>
here is a plunker with an example of this, including chaining (multiple nested calls of a &
expression):
http://plnkr.co/edit/j4FCBIx0FVz4OT0w50bU?p=preview
答案 1 :(得分:0)
实际上,&
是指单向数据绑定。
所以=
是双向数据绑定,这意味着对指令所做的更改将持久保存到原始对象。
@
只是一个字符串。
&
很特别。问题在于它为您的值创建了一个getter,在调用函数的情况下,getter实际上调用了该函数。我倾向于在DDO上这样做:
.directive('myDirective', function() {
return {
restrict: 'E',
scope: {
getParameters: '&?params'
}
所以这样,绑定到scope
的值是getParameters
(所以很明显是一个getter)但是在指令元素上你只会将它称为params
:< / p>
<my-directive params="ctrl.params">
你的问题很模糊,即使你可以做你所要求的,我认为最好在指令内而不是你提出的方式。
我希望这会有所帮助。