javascript - Hur implementerar man ng-change för en anpassad direktiv för en vallista?


Min direktivanvändningskod

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

Min direktivkod

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

Min direktivmall

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

Så, när det valda objektet ändras, kallas funktionen someFunction() oändligt antal gånger (även om ändringen sker bara en gång), vad bör ändras för att säkerställa att someFunction() bara kallas en gång (someFunction() är en funktion inom det controller-scope där direktivet används)

[ Jag försökte använda & och @ för scopen av typen ngChange, somefunction() körs inte om man använder dessa. ]

Svar #1

Du bör använda & som används för uttryck och från markup kan du kalla den metoden som ngChange() istället för bara ngChange

Markup

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

Kod

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

Exempel Plunkr