从内部指令传递参数给ngChange事件调用(Passing arguments to ngChan

2019-08-16 18:52发布

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

<radio-buttons options="optionsList" 
               ng-model="myModel" 
               ng-change="myCallback($event)"></radio-buttons>

我在我的控制,定义的函数myCallback ,看起来像这样:

$scope.myCallback = function(e) {
    console.log("Callback from controller");   
    console.log(e);
}

下面的功能选择我中存在radioButton指令。 我需要当ngChange回调是我在选择功能指令内部执行定义:

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

        scope.callback.call();
    }
}

我遇到的问题是参数$eventmyCallback是不是相处时,我执行传递myCallback里面select我的指令功能。

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

我究竟做错了什么?

Answer 1:

你必须传递参数,像这样的回调:

callback({parametername: value});

而且你必须参数名称与在HTML中声明的一个匹配

你的情况:

callback({$event: val})


Answer 2:

如果你想控制,当你的NG-变化处理程序被调用,我认为最简单的办法是彻底清除NG-变化 - 你可以直接从你的NG-点击回拨电话的控制器功能。

我认为,这达到您所期望的功能:

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

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

ng-click="select(scope, option.value, $event)"

然后在需要的时候可以调用控制器功能:

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


Answer 3:

以下不好看,但会工作(它会创建另一个变量$event ,并通过它传递ng-change ):

ng-click="$event = $event" ng-change="myCallback($event)"


Answer 4:

在值传递到您的控制器使用具有对应于所述接收器参数您的模板所限定的键的对象调用它。

元件

<my-element change="myFunction(value, id, event)"></my-element>

呼叫者

{
   "restrict" : ...,
   "scope" : {
       "change" : "&"
    },
   "controller" : function($scope){
       this.someEventHandler = function($event){

          // called here
          scope.change({
              "value" : "somevalue",
              "id" : "someid",
              "event" : $event
          });

       }
   }
}

父控制器接收机

$scope.myFunction = function(v, i, e){
   // do stuff
}

REF: 从内部指令将参数传递给ngChange事件调用



文章来源: Passing arguments to ngChange event call from inside directive