Bene, ho un problema qui. Ho una ng-repeat all'interno della quale è presente un input con ng-change(). Questa è una parte del modello direttiva e il doppio modo associato a un oggetto padre. Se scrivo qualcosa nella casella di input, tutto funziona correttamente e l'oggetto principale viene aggiornato. Tuttavia, quando devo sostituire l'oggetto genitore dal controller della direttiva, devo affrontare un problema.Funzione ng-change chiamata più volte dall'ingresso all'interno di ng-repeat
Il problema è che, una volta sostituito l'oggetto padre, la vista è associata a nuovi valori (sostituiti). Anche in quel momento la stessa funzione (come in ng-change()) viene attivata manualmente per alcuni calcoli.
Tuttavia, ho notato che la stessa funzione viene nuovamente richiamata (non so come). La cosa importante è che il modello ng di input non è definito, quando vengono chiamati automaticamente. Di conseguenza, finalmente l'oggetto genitore contiene un valore non definito.
Sono ancora confuso, perché il ng-change viene chiamato, dopo che il metodo del controller chiama. È necessario fare qualcosa con gli ambiti figlio creati da ng-repeat.
Ho già utilizzato la traccia per $ indice. e ho binded modelli di parentObj.something.something [indice $]
Qualsiasi aiuto su sopra è apprezzato ...
ho
module.directive('myDirective', function() {
return {
scope: {
target: '=',
},
controller: 'DemoController',
templateUrl: 'app/demo/html/demo.html'
}
});
template Main:
<li ng-repeat="l in group_Main.mains"
<li ng-repeat="target in l.description.Value track by $index"
<li ng-repeat="(key, groups) in target.group track by $index">
<div layout="row" layout-wrap myDirective target="group"></div>
</li>
</li>
</li>
app/demo/html/demo.html:: Modello di direttiva
<div class="table_FY_height" flex ng-repeat="m in months track by $index">
<input ng-change="changeIt(target.targets.years[1].values.data[$index], target, year,parent, $index)"" ng-if="$index>currentMonth" ng-model="target.targets.years[1].values.data[$index]"/>
</div>
Nel controllore della direttiva:
module.controller('DemoController', function($scope, $rootScope){
changeIt(-1,$scope.target,$scope.year,$scope.parent);
}
dal regolatore della direttiva, sto cercando di chiamare un API e aggiornare destinazione dati come:
http.get(url).then({
function(APIResponse){
for(var i=0; i<12; i++){
target.targets.years[1].values.data[i] = APIResponse.targets.years[1].values.data[i]
}}, function(error){
//error handling here}
}
In questo modo si chiama il dirrective e aggiorna la visualizzazione sullo schermo con nuovi valori da APIResponse. Dato che la vista direttiva è controllata usando ng-show, i nuovi valori rimangono intatti nella vista. Questa funzione è chiamata una volta in controller per chiamata direttiva con primo argomento come -1. Ma dopo di ciò viene eseguito di nuovo con il primo valore come "non definito". Con undefined, viene eseguito tutte le volte che viene compilata la direttiva. Di conseguenza lo target.targets.years [1] .values.data [$ index] diventa indefinito.
Qualche idea che sta andando storto? Mi sono grattato la testa per ore.
potresti aggiungere del codice ..? per avere più idea di cosa sta succedendo .. –
@PankajParkar Per favore, guarda di nuovo. Portami con me nel caso, la lingua non è chiara. –
puoi fornire campioni di dati con dati di esempio? – Grundy