13

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);
}

次の関数 select は、私のradioButtonディレクティブ内に存在します。select 関数のディレクティブ内で ngChange コールバックがいつ実行されるかを定義する必要があります。

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

        scope.callback.call();
    }
}

私が抱えている問題は、ディレクティブの関数内で実行するときに引数$eventmyCallback渡されないことです。myCallbackselect

フィドル: http://jsfiddle.net/dkrotts/BtrZH/7/更新: http://jsfiddle.net/dkrotts/BtrZH/8/

私は何を間違っていますか?

4

4 に答える 4

5

ng-change のハンドラーがいつ呼び出されるかを制御したい場合は、ng-change を完全に削除するのが最も簡単な方法だと思います。コントローラー関数を ng-click コールバックから直接呼び出すことができます。

これで目的の機能が実現すると思います:

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);
    }
}
于 2013-02-18T03:52:21.050 に答える
5

次のように、コールバックでパラメーターを渡す必要があります。

callback({parametername: value});

そして、パラメータ名をHTMLで宣言されたものと一致させる必要があります

あなたの場合:

callback({$event: val})
于 2013-06-11T12:38:15.053 に答える
1

コントローラーに値を渡すには、テンプレートで定義されているレシーバー引数に対応するキーを持つオブジェクトを使用してコントローラーを呼び出します。

例えば

エレメント

<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 イベント呼び出しに引数を渡す

于 2014-09-16T18:37:10.930 に答える