【问题标题】:How to call angular controller scope function from directive with parameters?如何从带有参数的指令中调用角度控制器范围函数?
【发布时间】:2014-04-09 23:35:05
【问题描述】:

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

指令(标记):

<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 内部解决得很好,但是在被调用的作用域函数内部,参数为空!我究竟做错了什么?如何获取参数以使其通过?

【问题讨论】:

    标签: javascript angularjs angularjs-directive


    【解决方案1】:

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

    指令链接函数:

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

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

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

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

    【讨论】:

      【解决方案2】:

      尝试将您的标记替换为如下指令:

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

      和指令标记:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多