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
