Angulaire de la mise à jour de l'objet dans l'objet array
Dire que j'ai la suite du tableau d'objets, permet de le nom il itemArray;
{
"totalItems": 2,
"items": [
{
"id": 1,
"name": "foo"
},
{
"id": 2,
"name": "bar"
},
]
}
Et j'ai un abonnement qui renvoie le résultat mis à jour de seulement 2 de code. Comment puis-je mettre à jour le tableau d'objets sans boucle à travers l'ensemble de la matrice?
Ce que je voudrais, c'est quelque chose comme l'exemple ci-dessous;
updateUser(user){
this.myservice.getUpdate(user.id)
.subscribe(newitem => {
this.updateArray(newitem);
});
}
updateArray(newitem){
this.itemArray.items[newitem.id].name = newitem.name
}
ou encore mieux, en remplacement de la totalité de l'objet;
updateArray(newitem){
this.itemArray.items[newitem.id] = newitem
}
Cet exemple cependant les mises à jour de la matrice en fonction de l'indice du tableau. Alors, comment puis-je mettre à jour basé sur newitem.id?
Modèle demandé en commentaire:
<tr *ngFor="let u of itemsArray.items; let i = index">
<td>{{ u.id }}</td>
<td>{{ u.name }}</td>
<td>
<input type="checkbox" checked="u.accepted" [(ngModel)]="itemsArray.items[i].accepted" (ngModelChange)="updateUser(u)">
<label for="singleCheckbox-{{i}}"></label>
</td>
</tr>
Êtes-vous à l'aide de cet objet pour le rendu de la sortie à partir d'une boucle sur cette itemArray (id 2)? Ce que je suis, pourriez-vous écrire une tuyauterie sur mesure pour ce filtre?
"Cet exemple cependant les mises à jour de la matrice en fonction de l'indice du tableau. Alors, comment puis-je mettre à jour basé sur newitem.id?". Pourquoi ne voulez-vous pas mettre à jour un élément à partir d'un index? Il sera certainement plus rapide que la boucle de la matrice de la recherche de l'id...
la mise à jour de l'index serait bien. Comment trouver le bon indice? Maintenant, l'indice ne correspond pas à la newitem.id
bien que ce soit une réponse à partir du back-end, il n'a pas l'index. Pourrais-je recherche de l'indice basé sur la newitem.id.itemArray.articles?
Pouvez-vous inclure votre modèle en question?
"Cet exemple cependant les mises à jour de la matrice en fonction de l'indice du tableau. Alors, comment puis-je mettre à jour basé sur newitem.id?". Pourquoi ne voulez-vous pas mettre à jour un élément à partir d'un index? Il sera certainement plus rapide que la boucle de la matrice de la recherche de l'id...
la mise à jour de l'index serait bien. Comment trouver le bon indice? Maintenant, l'indice ne correspond pas à la newitem.id
bien que ce soit une réponse à partir du back-end, il n'a pas l'index. Pourrais-je recherche de l'indice basé sur la newitem.id.itemArray.articles?
Pouvez-vous inclure votre modèle en question?
OriginalL'auteur phicon | 2017-05-22
Vous devez vous connecter pour publier un commentaire.
J'ai créé ce Plunker basé sur votre exemple que les mises à jour de l'objet est égale à newItem.id
Voici l'extrait de ma fonctions:
Espère que cette aide.
excellent! une partie seulement, je suis confus sur la façon d'actualiser le tableau sur l'écran.
Bonne réponse, mais peut être réduite en utilisant findIndex à la place.
Merci De Nahal. J'ai utilisé votre code ici - stackblitz.com/edit/angular-item-edit-jk7b9k
OriginalL'auteur Nehal
La mise à jour directement l'élément passé en argument devrait faire le travail, mais je suis peut-être manqué quelque chose ?
EDIT : Si vraiment vous n'avez pas le choix, mais d'une boucle sur l'ensemble de votre tableau de mise à jour de votre article, utiliser findIndex :
OriginalL'auteur Eld0w
Vous pouvez l'essayer aussi de remplacer un objet existant
OriginalL'auteur Vishnu Sharma
Une autre approche pourrait être:
OriginalL'auteur Pedro Benevides
Je préfère créer une carte
et alors vous pouvez simplement
même
tableau est donc de 1999. 🙂
OriginalL'auteur sowen
Vous pouvez utiliser la boucle for pour trouver votre élément et de le mettre à jour:
this.users.push( itemsArray.find( el => el.id == newItem.id ) )
OriginalL'auteur Dositej Grbović