如何为选择列表的自定义指令实现ng-change?

Vis*_*kar 6 javascript angularjs angularjs-directive angularjs-scope ng-options

我的指令用法代码

       <input-select ng-model="someModel" ng-change="someFunction()"
   options="countries"></input-select>
Run Code Online (Sandbox Code Playgroud)

我的指令代码

 .directive('inputSelect', function () {
    return {
        templateUrl: 'someTemplate.html',
        restrict: 'E',
        scope: {
            ngModel: '=',
            ngChange: '='
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

我的指令模板

    <select 
            ng-model="ngModel" ng-init="ngModel "
            ng-options="option[optionId] as option[optionName] for option in options"
            ng-change="ngChange">
    </select>
Run Code Online (Sandbox Code Playgroud)

因此,当所选项被更改时,函数someFunction()将被无限次调用(尽管更改已完成一次),应该更改的内容以确保someFunction()只调用一次(someFunction()是控制器范围内的函数)该指令正在使用中)

[我确实尝试使用&和使用@ngChange的范围类型,somefunction()如果使用它们不会被解雇.]

Pan*_*kar 5

您应该使用&哪个用于表达式,并且可以使用标记来调用该方法,ngChange()ngChange不仅仅是

标记

  <select 
        ng-model="ngModel" ng-change="ngChange()"
        ng-options="option[optionId] as option[optionName] for option in options">
  </select>
Run Code Online (Sandbox Code Playgroud)

scope: {
   ngModel: '=',
   ngChange: '&'
}
Run Code Online (Sandbox Code Playgroud)

示例Plunkr