-1
votes

Comment activer le tuyau en angulaire si le modèle a changé?

J'ai le tuyau de filtre que j'utilise pour filtrer des objets d'objets. Le tuyau de filtre a une injection de dépendance par service. Le service a des données de modèle filtreservice.data ​​code>.

Comment activer le tuyau dans le modèle uniquement lorsque le modèle en service est modifié? P>

 *ngFor="let item of response | filter"


0 commentaires

3 Réponses :


0
votes

Au lieu de vérifier dans le modèle, vous pouvez conserver l'état du modèle dans le service et appliquer la transformation uniquement si elle répond à votre condition.

@Pipe({
  name: 'filter',
})
export class FilterPipe implements PipeTransform {
  constructor(private filterService: FilterService) {}

  transform(array: any, start?: any, end?: any): any {
    if (filterService.applyTransform) {
      // apply transformation
    } else {
      return array;
    }
  }
}


1 commentaires

Oui, mais le tuyau n'est pas détecter les modifications, pour activer le tuyau doit être une action à l'extérieur, n'est pas?



1
votes

Solution rapide - tuyau impure, sera mis à jour avec chaque modification, même si elle est inutilement: xxx

mais cette solution n'est pas acceptable en termes de performances.

Mise à jour pure des tuyaux après la modification de la valeur ou des arguments, Bbut si la référence à la matrice n'a pas changé, le tuyau ne sera pas mis à jour. Vous pouvez essayer de mettre à jour la référence sur tableau après la matrice de modification: réponse = [... réponse]


0 commentaires

0
votes

Un tuyau angulaire est pur par défaut. Il déclenche uniquement une mise à jour lorsque l'un des paramètres d'entrée strong> change. C'est la seule façon de «activer» le tuyau (mettre à jour son résultat). Tout service de dépendance que le tuyau utilise est interne et sans pertinents pour le consommateur de tuyaux qui est responsable de la réaffectation de son point de vue après avoir détecté les modifications apportées aux données fournies au tuyau.

Donc dans votre exemple, uniquement lorsque l'angulaire détecte un changement de tableau code>, Démarrer code> ou fin code>, puis active le tuyau. Encore une fois, la modification de ces paramètres est le seul moyen de contrôler la ré-application du tuyau. Donc, la manière appropriée de faire la mise à jour du tuyau après une modification du modèle consiste à propager le changement via l'un des paramètres d'entrée introduits dans le tuyau. Ensuite, à l'intérieur du tuyau, vous pouvez appliquer le service de transformation vers les données pour produire le résultat souhaité. Ne nourrissez pas le service avec des données en dehors de ce flux ou ne sera jamais rattrapé par la détection de changement. Rendre le tuyau dépend des données externes telles que celles est sujette aux effets secondaires, enfreignant la règle selon laquelle un tuyau pur doit être une fonction pure. P>

dire si vous souhaitez ajouter plus de critères de tri au filtre, vous devez Modifiez votre tuyau comme celui-ci: p>

  array = [...array, newItem];  // NOT array.push(newItem);


2 commentaires

Lorsque l'un des paramètres d'entrée est-ce que vous voulez dire @input () ou paramètres de transformer () ?


@Meganclerc Paramètres de Transform () équivalent à @input () pour les tuyaux