NgFor n'a pas de mise à jour des données avec un Tuyau dans Angular2

Dans ce scénario, j'affiche une liste des étudiants (tableau) à la vue avec ngFor:

<li *ngFor="#student of students">{{student.name}}</li>

C'est merveilleux qu'il met à jour à chaque fois que j'ajoute d'autres étudiants à la liste.

Cependant, quand je lui donne un pipe à filter par le nom de l'étudiant,

<li *ngFor="#student of students | sortByName:queryElem.value ">{{student.name}}</li>

Il ne met pas à jour la liste jusqu'à ce que je tape quelque chose dans le filtrage de l'étudiant nom de domaine.

Voici un lien vers plnkr.

Hello_world.html

<h1>Students:</h1>
<label for="newStudentName"></label>
<input type="text" name="newStudentName" placeholder="newStudentName" #newStudentElem>
<button (click)="addNewStudent(newStudentElem.value)">Add New Student</button>
<br>
<input type="text" placeholder="Search" #queryElem (keyup)="0">
<ul>
    <li *ngFor="#student of students | sortByName:queryElem.value ">{{student.name}}</li>
</ul>

sort_by_name_pipe.ts

import {Pipe} from 'angular2/core';

@Pipe({
    name: 'sortByName'
})
export class SortByNamePipe {

    transform(value, [queryString]) {
        //console.log(value, queryString);
        return value.filter((student) => new RegExp(queryString).test(student.name))
        //return value;
    }
}

  • Ajouter pure:false dans votre Pipe, et changeDetection: ChangeDetectionStrategy.OnPush dans votre Composant.
  • Merci @EricMartinez. Elle fonctionne. Mais pouvez-vous expliquer un peu?
  • Aussi, je suggère de ne PAS utiliser .test() dans votre fonction de filtre. Ses parce que, si les entrées de l'utilisateur une chaîne qui comprend la signification particulière des personnages comme: * ou + etc. votre code de casser. Je pense que vous devriez utiliser .includes() ou de l'évasion de la chaîne de requête avec la fonction personnalisée.
  • L'ajout de pure:false et de faire de votre tuyau stateful résoudre le problème. La modification de ChangeDetectionStrategy n'est pas nécessaire.
  • Pour tous ceux qui lisent ceci, la documentation Angulaire des Tuyaux a obtenu beaucoup mieux et va sur un grand nombre des mêmes choses discutées ici. Check it out.
InformationsquelleAutor Chu Son | 2015-12-24