Ho una semplice applicazione in cui posso aggiungere utenti a un elenco e rimuoverli.L'ambito angolare non si aggiorna quando si rimuove un articolo
Il modulo per aggiungere un nuovo utente si lega a $scope.newPerson
. All'invio del modulo, aggiungo l'oggetto newPerson
a $scope.people
che è un array contenente oggetti person
.
I looping sull'array people
con una direttiva ng-repeat
, per stampare le persone attualmente aggiunte all'ambito. Queste righe sono tutte dotate di pulsante Rimuovi (Jade frammento):
div.row(data-person, ng-repeat="person in people", ng-model="person")
button(ng-click="removePerson(person)") Remove
quando clicco sul pulsante Rimuovi, eseguo questa funzione:
$scope.removePerson = function(person) {
var index = $scope.people.indexOf(person);
if (index > -1) {
$scope.people.splice(index, 1);
person = null;
}
}
Ciò elimina la riga dalla tabella, e imposta il person
portata a null
. Batarang mostra { This scope has no models }
in seguito.
Tuttavia, ho notato che il mio array people
non si aggiorna. Quando controllo lo scope in Batarang, la persona che ho appena eliminato è ancora in quella matrice. Quando inizio a digitare per aggiungere una nuova persona, si aggiorna. Se invio l'intera pagina al mio server senza farlo, l'array contiene ancora le persone rimosse.
Se inserisco $scope.$apply()
dopo person = null;
, ottengo il comportamento previsto, tuttavia genera un errore che è apply is in progress
. Leggo anche chiamando lo $apply()
da solo, è considerato una cattiva pratica. (?)
Sono nuovo di Angular e non riesco a trovare molte informazioni sulla risoluzione di questo problema. Come posso aggiornare i miei array quando rimuovo una persona? Grazie.
E 'possibile per voi per creare un jsfiddle veloce o plnkr che demostrates il tuo problema? Credo che sia un problema di ambito, ma non ci sono abbastanza informazioni in ciò che hai fornito per vedere come sono configurati tutti i tuoi ambiti/direttive/controllori. – dtabuenc
BTW, la persona = null non sta facendo altro che impostare la persona su null all'interno della funzione (non cambia la persona al di fuori della funzione). Inoltre, sei corretto, non dovresti mai chiamare tu stesso applicare (tranne che in una direttiva in risposta a un evento esterno). – dtabuenc