我正在尝试调用一个位于指令父作用域中的函数,但它没有被调用。 我们想要将正在修改的参数'arg'传递给父作用域,并像'arg = arg + 1'那样对它做一些逻辑,但是这个函数没有被调用。
function MyCtrl($scope) {
$scope.arg = 0
$scope.myFunction = function(arg) {
//do some logic like '+ 1'
arg++;
$scope.arg = arg;
}
}
myApp.directive('directive', function () {
return {
restrict: 'E',
scope: {
arg: '=arg',
fun: '&'
},
template: '<input ng-model="arg"/>',
link: function (scope) {
scope.$watch('arg', function (arg) {
scope.fun(arg);
});
}
};
});
这是一个基本用例的小提琴。 http://jsfiddle.net/HB7LU/2677/
答案 0 :(得分:2)
$ scope函数未被调用,因为你正在解析它。
要解析一个函数,你需要像这样分配它:
<directive arg="arg" fun="myFunction()"></directive>
如果你想传递参数,你需要更加小心。首先,您需要提前描述参数:
<directive arg="arg" fun="myFunction(arg)"></directive>
当你在指令中调用函数时,你就像这样应用它:
scope.fun({arg: arg});
我创建了一个解决您问题的jsFiddle:jsFiddle
请注意,你自己的小提琴有一个递归调用:每当你增加arg
时你也会触发$watch
,所以它进入循环。我改变了一点(因为我知道你只是为了展示你的榜样。
如果您想进一步了解指令中的&
解析,请查看我强烈推荐的视频:egghead.io isolate scope &