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

How to call angular controller scope function from directive with parameters?

本文关键字:调用 控制器 函数 范围 指令 参数      更新时间:2023-09-26

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

指令(标记):

<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中解析得很好,但在调用的scope函数中,参数为null!我做错了什么?如何获取参数以使其通过?

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

指令链接功能:

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

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

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

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

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

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

和指令标记:

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