2016-10-28 3 views
6

J'ai une collection de modèles. Dans le gabarit, j'utilise le tuyauDétection angulaire à 2 tubes

<div class="card-panel" *ngFor="let card of cards | sortByType"> 
    <card-view [card]="card" [autoupdate]="true"></card-view> 
</div> 

Dans chaque composant, j'ai un temporisateur pour les données de mise à jour. Mais lorsque le modèle est mis à jour, le tube ne s'est pas exécuté à nouveau. Y a-t-il moyen de forcer la conduite ou de faire de manière angulaire dans cette situation.

En vue carte, j'ai une minuterie qui a mis à jour la variable de la carte. Mais angulaire ne pas attraper cette modification pour le déclenchement tuyau

+0

double possible de [NgFor ne met pas à jour les données avec une pipe à Angular2] (http:. // stackoverflow.com/questi ons/34456430/ngfor-doesnt-update-données-avec-pipe-in-angular2) – Clint

Répondre

13
  • Vous pouvez créer une copie de cards que Angular2 détection de changement détecte le changement et exécute le tuyau à nouveau.

  • Vous pouvez faire le tuyau impur

@Pipe({ name: 'sortByType', pure: false}) 

ce qui provoque votre conduite à exécuter chaque détection de changement de temps est exécuté.

Vous pouvez effectuer une détection de modification personnalisée à l'aide de IterableDiffer et renvoyer le résultat mis en cache lorsque le tableau n'a pas réellement été modifié.

Avec cette option, vous devez faire attention à ne pas causer de dégradation sérieuse des performances.

  • Vous pouvez passer un paramètre supplémentaire à la conduite que vous mettez à jour (par exemple un nombre qui obtient augmente chaque fois que les modifications du tableau.

De cette façon, la conduite est appelée parce que la détection de changement angulaire appelle la . tuyau à chaque fois que la valeur ou un changement paramètre

un inconvénient est qu'il est un peu plus difficile à utiliser