Liste de tâches simple, mais avec un bouton de suppression sur la page de liste pour chaque élément:
HTML du modèle pertinent:
<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>
Méthode de contrôleur pertinente:
$scope.delete = function (person) {
API.DeletePerson({ id: person.id }, function (success) {
// I need some code here to pull the person from my scope.
});
};
J'ai essayé $scope.persons.pull(person)
et $scope.persons.remove(person)
.
Bien que la base de données ait été supprimée avec succès, je ne peux pas extraire cet élément de la portée et je ne veux pas faire un appel de méthode au serveur pour les données que le client possède déjà, je veux simplement supprimer cette personne de la portée.
Des idées?
javascript
html
angularjs
Au revoir
la source
la source
Réponses:
Votre problème ne concerne pas vraiment Angular, mais les méthodes Array. La méthode appropriée pour supprimer un élément particulier d'un tableau est d'utiliser
Array.splice
. De plus, lorsque vous utilisez ng-repeat, vous avez accès à la fonction spéciale$index
propriété , qui est l'index actuel du tableau que vous avez passé.La solution est en fait assez simple:
Vue:
Manette:
la source
indexOf
peut être une opération plus coûteuse; sans filtrage, c'est totalement inutile. Mais avec le filtrage, ceindexOf
serait la méthode appropriée.Vous devrez trouver l'index du
person
dans votrepersons
tableau, puis utiliser lasplice
méthode du tableau :la source
J'utiliserais la bibliothèque Underscore.js qui contient une liste de fonctions utiles.
without
Exemple
Voir Démo dans JSFiddle .
filter
Exemple
Voir Démo dans Fiddle .
la source
$scope.nodes = _.without($scope.nodes, node);
parce qu'il fait référence aunode
Array.prototype.filter
._.filter(array, fun)
devientarray.filter(fun)
.cela fonctionne pour moi!
la source
Si vous avez une fonction associée à la liste, lorsque vous créez la fonction d'épissure, l'association est également supprimée. Ma solution:
Le paramètre de liste est nommé items . Le paramètre x.done indique si l'élément sera supprimé.
Autres références: un autre exemple
J'espère vous aider. Salutations.
la source
Pour la réponse acceptée de @Joseph Silber ne fonctionne pas, car indexOf renvoie -1. Ceci est probablement dû au fait qu'Angular ajoute une clé de hachage, ce qui est différent pour mon $ scope.items [0] et mon élément. J'ai essayé de résoudre cela avec la fonction angular.toJson (), mais cela n'a pas fonctionné :(
Ah, j'ai découvert la raison ... J'utilise une méthode chunk pour créer deux colonnes dans ma table en regardant mon $ scope.items. Désolé!
la source
Vous pouvez également utiliser ceci
la source
Angular a une fonction intégrée appelée
arrayRemove
, dans votre cas, la méthode peut simplement être:la source
la source
Pour supprimer un élément de la portée, utilisez:
De entrez la description du lien ici
la source