javascript - Como implementar ng-change para diretiva personalizada em lista de seleção?
Meu código de uso de diretiva
<input-select ng-model="someModel" ng-change="someFunction()"
options="countries"></input-select>
Meu código diretivo
.directive('inputSelect', function () {
return {
templateUrl: 'someTemplate.html',
restrict: 'E',
scope: {
ngModel: '=',
ngChange: '='
}
};
});
Meu modelo de diretiva
<select
ng-model="ngModel" ng-init="ngModel "
ng-options="option[optionId] as option[optionName] for option in options"
ng-change="ngChange">
</select>
Então, quando o item selecionado é alterado, a função someFunction() está sendo chamada infinitas vezes (embora a mudança ocorra apenas uma vez). O que deve ser alterado para garantir que someFunction() seja chamada apenas uma vez ( someFunction() é uma função no escopo do controlador no qual a diretiva está sendo usada )
[ Eu realmente tentei usar & e @ para o tipo de escopo do ngChange, somefunction() não é executado se usar esses. ]
Resposta #1
Você deve usar & que é usado para expressão e a partir da marcação você poderia chamar esse método como ngChange() ao invés de apenas ngChange
Marcações
<select
ng-model="ngModel" ng-change="ngChange()"
ng-options="option[optionId] as option[optionName] for option in options">
</select>
Código
scope: {
ngModel: '=',
ngChange: '&'
}
Exemplo Plunkr
