从内部指令传递参数到ngChange事件调用

Dus*_*tin 13 angularjs angularjs-directive

我有一个接受ng-change属性的指令:

<radio-buttons options="optionsList" 
               ng-model="myModel" 
               ng-change="myCallback($event)"></radio-buttons>
Run Code Online (Sandbox Code Playgroud)

我在我的控制器中定义了一个函数,myCallback如下所示:

$scope.myCallback = function(e) {
    console.log("Callback from controller");   
    console.log(e);
}
Run Code Online (Sandbox Code Playgroud)

我的radioButton指令中存在以下函数select .我需要定义何时在select函数中的指令中执行ngChange回调:

function select(scope, val) {
    if (!scope.disabled && scope.selectedValue != val) {
        scope.selectedValue = val;
        scope.model = val;

        scope.callback.call();
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当我在我的指令函数内执行时,参数$eventmyCallback没有被传递.myCallbackselect

小提琴:http://jsfiddle.net/dkrotts/BtrZH/7/更新:http://jsfiddle.net/dkrotts/BtrZH/8/

我究竟做错了什么?

Ale*_*orn 5

如果您想控制何时调用 ng-change 的处理程序,我认为最简单的方法是完全删除 ng-change - 您可以直接从 ng-click 回调中调用控制器函数。

我认为这可以实现您想要的功能:

http://jsfiddle.net/BtrZH/11/

如果需要,您可以从单击中捕获事件对象:

ng-click="select(scope, option.value, $event)"
Run Code Online (Sandbox Code Playgroud)

然后您可以在需要时调用控制器函数:

function select(scope, val, $event) {
    if (!scope.disabled && scope.selectedValue != val) {
        scope.selectedValue = val;
        scope.model = val;
        scope.$parent.myCallback($event);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您必须像这样在回调中传递参数:

callback({parametername: value});
Run Code Online (Sandbox Code Playgroud)

而且您必须将参数名称与HTML中声明的名称进行匹配

在您的情况下:

callback({$event: val})
Run Code Online (Sandbox Code Playgroud)