6

mio codice di utilizzo di direttivaCome implementare ng-change per la direttiva personalizzata per l'elenco di selezione?

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

Il mio codice direttiva

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

Il mio modello di direttiva

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

Così, quando l'elemento selezionato viene cambiata, la funzione someFunction() è sempre chiamato per infinito volte (anche se il cambiamento viene effettuato una volta), cosa dovrebbe essere cambiato per assicurarsi che someFunction() venga chiamato onl y volta (someFunction() è una funzione della portata del regolatore in cui viene utilizzata la direttiva)

[ho provato utilizzando & e @ per il tipo di applicazione ngChange, somefunction() non licenziano se utilizzare quelli. ]

risposta

5

Si dovrebbe usare & che viene utilizzato per l'espressione e per il markup si potrebbe chiamare tale metodo come ngChange() invece ngChange solo

Markup

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

Codice

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

Example Plunkr

+0

'&' o '@' non funziona - 'someFunction()' non viene eseguito se usato così. –

+0

@VishwajeetVatharkar prova il modo in cui ho suggerito..cambiare il tuo codice come ho impostato. Finché poi creerò un plunkr per te –

+0

facendo in modo che 'ngChange()' nel modello non funzioni. –