AngularJS - 隔离范围表达式的替代使用(“&”)

时间:2015-06-21 20:32:29

标签: angularjs angularjs-directive isolate-scope

我知道"&"绑定用于将方法(表达式)传递给指令隔离范围,因此指令将能够在需要时执行它。

很多时候,我需要将来自主控制器的相同表达式(多个深度)传递给嵌套指令(2-3级)。这就是我自己的原因,我不喜欢为此目的使用"&"。对我来说,使用"="绑定发送“回调”的效果要好得多。但这不是一个问题。

问题是:
为什么,除了传递函数之外我还可以使用"&"? 我可以这样:my-directive-click="clickCount +=1"吗?

2 个答案:

答案 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">

你的问题很模糊,即使你可以做你所要求的,我认为最好在指令内而不是你提出的方式。

我希望这会有所帮助。