父作用域中args的函数正在绑定,但不在angular指令中调用

时间:2014-03-19 19:50:20

标签: angularjs function angularjs-directive arguments

我正在尝试调用一个位于指令父作用域中的函数,但它没有被调用。 我们想要将正在修改的参数'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/

1 个答案:

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

相关问题