如何从带有参数的指令调用角度控制器范围函数?

时间:2014-04-09 23:35:06

标签: javascript angularjs angularjs-directive

这与堆栈上的其他问题略有不同,我需要使用仅存在于我的指令中的参数来调用我的控制器函数。

指令(标记):

<div do-something="doSomething(x)"></div>

指令(js):

var directive = function () {
    return {
        restrict: 'EA',
        templateUrl: '/angular/node-for-detail.html',
        scope: {
            doSomething: '&'
        }
    }
};
指令内的

标记:

<span ng-click="doSomething('im not resolving')"></span>
控制器内的

功能:

$scope.doSomething = function(myVar) { //myVar is null };

所以问题是,在指令param.abs里面解决得很好,但是在调用范围函数里面,参数是null!我究竟做错了什么?如何让参数通过?

2 个答案:

答案 0 :(得分:0)

您需要为将在标记中指定的函数决定参数的标准名称(在您的示例中,您使用了x)。然后你可以在指令的隔离范围中创建一个函数,它将调用doSomething()方法,如下所示:

指令链接功能:

$scope.runCallback = function (param) {
    $scope.doSomething({x: param});
}

然后只需将指令内的标记更改为:

<span ng-click="runCallback('im not resolving')"></span>

现在您的标记调用(<div do-something="doSomething(x)"></div>)和控制器内部的功能将正常工作。

答案 1 :(得分:0)

尝试在指令中替换你的标记,如下所示:

<span ng-click="doSomething()('im not resolving')"></span>

指令标记:

<div do-something="doSomething"></div>