2
votes

Angular 5 - Erreur de tuyau personnalisé "introuvable"

J'ai essayé toutes les suggestions que j'ai vues là-bas, mais je rencontre toujours les redoutées: Erreurs d'analyse de modèle: Le tube 'orderFilter' est introuvable

Dans mon SharedModule. ts (qui importe MyComponent) J'ai:

{{item | orderFilter}}

Le code du tube (quelque chose de simple pour l'instant):

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'orderFilter'})
export class OrderFilterPipe implements PipeTransform {
  transform(item: any): any {
    return item.data;
  }
}

Dans MyComponent.html J'ai:

import { OrderFilterPipe } from '../pipes/order-filter.pipe';

@NgModule({
...
declarations: [OrderFilterPipe];
...

Je suis un peu perdu ... sauf si je manque quelque chose dans l'implémentation spécifique à Angular 5. Des idées?


8 commentaires

Le message d'erreur mentionne myPipe . Peut-être avez-vous cette faute de frappe quelque part dans votre balisage.


Pourquoi l'ajoutez-vous à la fois comme déclaration et comme fournisseur? Retirez-le des fournisseurs. De plus, ce que vous essayez est directement déconseillé dans la documentation angulaire , filtrez simplement dans le composant, utilisez des méthodes de tableau ou RxJS.


@ConnorsFan désolé, juste une faute de frappe dans mon exemple - j'ai changé les noms pour protéger les innocents;)


votre propriété de déclarations a maintenant une faute de frappe.


Lorsque vous dites que SharedModule importe le composant, que voulez-vous dire? Ajoutez-vous le composant à la propriété «importations» dans le module? Vous ne pouvez importer que d'autres modules.


@KeenanDiggs corrigé, merci


@KeenanDiggs omg .. J'ai trouvé la cause principale .. mon application n'importait pas réellement SharedModule .. elle importait MyComponent à partir d'un module différent .. c'est pourquoi elle n'a pas pu trouver le filtre. Ugh .. merci, Keenan vous avez aidé à localiser l'erreur dans mon code!


@brainmonter excellent! bonne année


3 Réponses :


1
votes

J'obtiens la même erreur lorsque je supprime le tube des «déclarations» de l'app.module dans cette reproduction minimale: https://stackblitz.com/edit/angular-wfi7v9

Quand je le rajoute, alto! Tout fonctionne. Cela me porte à croire que l'erreur se trouve dans le module qui consomme votre module de canalisation. Vous êtes-vous souvenu d'importer votre module pipe dans le module dans lequel réside MyComponent?


2 commentaires

Oui, je le vois fonctionner dans votre exemple. Si étrange pourquoi ce n'est pas à l'esprit ... quelque chose que je dois oublier. Oui, le tube est importé dans le SharedModule, dans lequel MyComponent vit


Il n'y a pas non plus d'erreur tslint dans mon modèle ... c'est juste pour une raison quelconque au moment de l'exécution, il ne peut pas le trouver et génère cette erreur



2
votes

Essayez un autre nom pour votre pipe, vous ne pouvez pas nommer votre pipe "filtre".


1 commentaires

Je viens d'utiliser un mauvais exemple tiré de mon code - juste mis à jour en 'orderFilter' pour supprimer toute confusion



1
votes

Lorsque nous ajoutons un composant ou une directive dans un fichier de module partagé, donc avec l'ajout de ce module à l'intérieur de la déclaration, nous devons également l'ajouter au tableau des exportations. Veuillez consulter le code ci-dessous:

import { OrderFilterPipe } from '../pipes/order-filter.pipe';

@NgModule({
declarations: [OrderFilterPipe],
exports: [OrderFilterPipe]     // you need to add this line
})


0 commentaires