@ and =见其他答案。
一个人抓住了你&
TL,博士;
&从父函数中获取表达式(不仅仅是其他答案中的例子中的函数),并将其设置为指令中的函数,该函数调用表达式。这个函数能够替换表达式的任何变量(甚至函数名),通过将变量传递给一个对象。
explained
& is an expression reference, that means if you pass something like
<myDirective expr="x==y"></myDirective>
in the directive this expr will be a function, that calls the expression, like:
function expr(){return x == y}.
so in directive's html <button ng-click="expr()"></button> will call the expression. In js of the directive just $scope.expr() will call the expression too.
The expression will be called with $scope.x and $scope.y of the parent.
You have the ability to override the parameters!
If you set them by call, e.g. <button ng-click="expr({x:5})"></button>
then the expression will be called with your parameter x and parent's parameter y.
You can override both.
Now you know, why <button ng-click="functionFromParent({x:5})"></button> works.
Because it just calls the expression of parent (e.g. <myDirective functionFromParent="function1(x)"></myDirective>) and replaces possible values with your specified parameters, in this case x.
it could be:
<myDirective functionFromParent="function1(x) + 5"></myDirective>
or
<myDirective functionFromParent="function1(x) + z"></myDirective>
with child call:
<button ng-click="functionFromParent({x:5, z: 4})"></button>.
or even with function replacement:
<button ng-click="functionFromParent({function1: myfn, x:5, z: 4})"></button>.
它只是一个表达式,不管它是一个函数,还是多个函数,或者只是比较。你可以替换这个表达式中的任意变量。
例子:
指令模板vs调用代码:
Parent已经定义了$scope。x, scope.y美元:
parent template: <myDirective expr="x==y"></myDirective>
<按钮ng-click = " expr ()></button>调用$scope.x==$scope.y
<button ng-click="expr({x: 5})"></按钮>调用5 == $scope.y
<button ng-click="expr({x:5, y:6})"></button>调用5 == 6
Parent已经定义了$scope。function1,美元范围。x, scope.y美元:
: <myDirective expr="function1(x) + y"></myDirective>
<按钮ng-click = " expr ()></button>调用$scope.function1($scope.x) + $scope.y
<button ng-click="expr({x: 5})"></button>调用$scope.function1(5) + $scope.y
<button ng-click="expr({x:5, y:6})">调用$scope.function1(5) + 6
指令有$作用域。myFn作为函数:
<button ng-click="expr({function1: myFn, x:5, y:6})"></button>调用$scope.myFn(5) + 6