Ich habe eine einfache Anwendung, mit der ich Benutzer zu einer Liste hinzufügen und sie entfernen kann. Das Formular zum Hinzufügen eines neuen Benutzers wird an $scope.newPerson
gebunden. Nach dem Senden des Formulars füge ich das newPerson
-Objekt zu $scope.people
hinzu, das ein Array ist, das person
Objekte enthält.Der Winkelbereich wird beim Entfernen eines Objekts nicht aktualisiert.
Ich Schleife über die people
Array mit einer ng-repeat
Richtlinie, um die Personen, die derzeit zum Umfang hinzugefügt werden. Diese Zeilen haben alle eine Entfernen-Taste (Jade-Schnipsel):
div.row(data-person, ng-repeat="person in people", ng-model="person")
button(ng-click="removePerson(person)") Remove
Wenn ich auf die Schaltfläche Entfernen klicken, ich diese Funktion ausführen:
$scope.removePerson = function(person) {
var index = $scope.people.indexOf(person);
if (index > -1) {
$scope.people.splice(index, 1);
person = null;
}
}
Diese die Zeile aus der Tabelle entfernt, und setzt die person
Umfang zu null
. Batarang zeigt danach { This scope has no models }
.
Allerdings habe ich festgestellt, dass mein people
Array nicht aktualisiert wird. Wenn ich den Bereich in Batarang überprüfe, ist die Person, die ich gerade gelöscht habe, immer noch in diesem Array. Wenn ich anfange zu tippen, um eine neue Person hinzuzufügen, wird sie aktualisiert. Wenn ich die gesamte Seite ohne diesen Vorgang an meinen Server übergebe, enthält das Array immer noch die entfernten Personen.
Wenn ich setzen $scope.$apply()
nach person = null;
, bekomme ich das erwartete Verhalten, aber es wirft einen Fehler, dass ein apply is in progress
. Ich lese auch $apply()
anrufen selbst gilt als schlechte Praxis. (?)
Ich bin neu in Angular und ich kann nicht viele Informationen zur Lösung dieses Problems finden. Wie würde ich mein Array aktualisieren, wenn ich eine Person entferne? Vielen Dank.
Ist es möglich, dass Sie eine schnelle jsfiddle oder plnkr zu erstellen, das Ihr Problem demostrates? Ich glaube, es ist ein Problem mit dem Oszilloskop, aber es gibt nicht genug Informationen in dem, was Sie zur Verfügung gestellt haben, um zu sehen, wie all Ihre Scopes/Direktiven/Controller eingerichtet sind. – dtabuenc
BTW, die Person = null tut nichts anderes als das Setzen von Person auf null innerhalb der Funktion (es ändert nicht die Person außerhalb der Funktion). Auch Sie haben Recht, Sie sollten nie selbst anrufen (anders als in einer Direktive als Reaktion auf ein externes Ereignis). – dtabuenc