如何为 select 列表的自定义指令实施 ng-change?

How to implement ng-change for custom directive for select list?

我的指令使用代码

       <input-select ng-model="someModel" ng-change="someFunction()"
   options="countries"></input-select>

我的指令代码

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

我的指令模板

    <select 
            ng-model="ngModel" ng-init="ngModel "
            ng-options="option[optionId] as option[optionName] for option in options"
            ng-change="ngChange">
    </select>

因此,当所选项目更改时,函数someFunction()被要求无限时间(尽管更改一次),应更改的内容以确保someFunction() get 只被调用一次(someFunction() 是使用该指令的控制器范围内的一个函数)

[ 我确实尝试过使用 &@ 作为 ngChange 的范围类型,如果使用它们,somefunction() 不会被触发。 ]

您应该使用用于表达式的 &,并且您可以从标记中调用该方法,例如 ngChange() 而不是 ngChange only

标记

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

代码

scope: {
   ngModel: '=',
   ngChange: '&'
}

Example Plunkr