AngularJS - 隔离作用域表达式的替代用途 ( "&" )



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

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

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

&更多的是允许您处理表达式,更重要的是(在我看来)允许您将参数放入调用父级的范围中。

例如,如果您有:

scope: {
    something: '&'
} 

然后在该指令模板中,您可以执行以下操作:

<select ng-model="selection" ng-change="something({$item: selection})" ...>

此指令的调用方/用户可以访问传递给something的表达式中的$item,即$item位于其作用域中。

例如

<my-dir something="myOwnVar = $item + 1"></my-dir>

这里有一个包含链接(&表达式的多个嵌套调用)的plunker示例:http://plnkr.co/edit/j4FCBIx0FVz4OT0w50bU?p=preview

实际上,&是单向数据绑定。

因此=是双向数据绑定,这意味着对指令所做的更改将保留到原始对象。

@只是一个字符串。

CCD_ 12是一个特殊的。问题是,它为您的值创建了一个getter,在调用函数的情况下,getter实际上调用了该函数。我倾向于在DDO:上这样做

.directive('myDirective', function() {
  return {
    restrict: 'E',
    scope: {      
      getParameters: '&?params'
    }

因此,通过这种方式,绑定到scope的值是getParameters(因此很明显是一个getter),但在directive元素上,您只能将其称为params:

<my-directive params="ctrl.params">

不过,你的问题很模糊,即使你可以按照你的要求去做,我认为最好在指令中这样做,而不是按照你提出的方式。

我希望这能有所帮助。