Einfache Aufgabenliste, jedoch mit einer Schaltfläche zum Löschen auf der Listenseite für jedes Element:
Relevante Vorlage HTML:
<tr ng-repeat="person in persons">
<td>{{person.name}} - # {{person.id}}</td>
<td>{{person.description}}</td>
<td nowrap=nowrap>
<a href="#!/edit"><i class="icon-edit"></i></a>
<button ng-click="delete(person)"><i class="icon-minus-sign"></i></button>
</td>
</tr>
Relevante Controller-Methode:
$scope.delete = function (person) {
API.DeletePerson({ id: person.id }, function (success) {
// I need some code here to pull the person from my scope.
});
};
Ich habe es versucht $scope.persons.pull(person)
und $scope.persons.remove(person)
.
Obwohl die Datenbank erfolgreich gelöscht wurde, kann ich dieses Element nicht aus dem Bereich ziehen und möchte keinen Methodenaufruf an den Server für Daten senden, über die der Client bereits verfügt. Ich möchte nur diese eine Person aus dem Bereich entfernen.
Irgendwelche Ideen?
javascript
html
angularjs
Tschüss
quelle
quelle
Antworten:
Ihr Problem liegt nicht wirklich bei Angular, sondern bei Array-Methoden. Der richtige Weg, um ein bestimmtes Element aus einem Array zu entfernen, ist mit
Array.splice
. Wenn Sie ng-repeat verwenden, haben Sie außerdem Zugriff auf die spezielle$index
Eigenschaft, bei der es sich um den aktuellen Index des Arrays handelt, das Sie übergeben haben.Die Lösung ist eigentlich ziemlich einfach:
Aussicht:
Regler:
quelle
indexOf
kann eine teurere Operation sein; ohne Filterung ist das völlig unnötig. Aber mit FilterungindexOf
wäre die geeignete Methode.Sie müssen den Index von
person
in Ihrempersons
Array finden und dann diesplice
Methode des Arrays verwenden:quelle
Ich würde die Bibliothek Underscore.js verwenden, die eine Liste nützlicher Funktionen enthält.
without
Beispiel
Siehe Demo in JSFiddle .
filter
Beispiel
Siehe Demo in Fiddle .
quelle
$scope.nodes = _.without($scope.nodes, node);
weil er Bezug auf dienode
Array.prototype.filter
._.filter(array, fun)
wirdarray.filter(fun)
.das funktioniert bei mir!
quelle
Wenn der Liste eine Funktion zugeordnet ist, wird beim Ausführen der Spleißfunktion auch die Zuordnung gelöscht. Meine Lösung:
Der Listenparameter heißt Elemente . Der Parameter x.done gibt an, ob das Element gelöscht wird.
Weitere Referenzen: Ein weiteres Beispiel
Hoffe dir zu helfen. Schöne Grüße.
quelle
Für die akzeptierte Antwort von @Joseph Silber funktioniert das nicht, da indexOf -1 zurückgibt. Dies liegt wahrscheinlich daran, dass Angular einen Hashkey hinzufügt, der sich für mein $ scope.items [0] und mein Element unterscheidet. Ich habe versucht, dies mit der Funktion angle.toJson () zu beheben, aber es hat nicht funktioniert :(
Ah, ich habe den Grund herausgefunden ... Ich verwende eine Chunk-Methode, um zwei Spalten in meiner Tabelle zu erstellen, indem ich meine $ scope.items beobachte. Es tut uns leid!
quelle
Sie können dies auch verwenden
quelle
Angular hat eine eingebaute Funktion namens
arrayRemove
, in Ihrem Fall kann die Methode einfach sein:quelle
quelle
So entfernen Sie ein Element aus dem Gültigkeitsbereich:
Von treten Sie hier ein Link Beschreibung
quelle