Je n'arrive pas à corriger cette erreur. J'ai une barre de recherche et un ngFor. J'essaie de filtrer le tableau en utilisant un tuyau personnalisé comme celui-ci:
import { Pipe, PipeTransform } from '@angular/core';
import { User } from '../user/user';
@Pipe({
name: 'usersPipe',
pure: false
})
export class UsersPipe implements PipeTransform {
transform(users: User [], searchTerm: string) {
return users.filter(user => user.name.indexOf(searchTerm) !== -1);
}
}
Usage:
<input [(ngModel)]="searchTerm" type="text" placeholder="Search users">
<div *ngFor="let user of (users | usersPipe:searchTerm)">
...
</div>
Erreur:
zone.js:478 Unhandled Promise rejection: Template parse errors:
The pipe 'usersPipe' could not be found ("
<div class="row">
<div
[ERROR ->]*ngFor="let user of (user | usersPipe:searchTerm)">
Versions angulaires:
"@angular/common": "2.0.0-rc.5",
"@angular/compiler": "2.0.0-rc.5",
"@angular/core": "2.0.0-rc.5",
"@angular/platform-browser": "2.0.0-rc.5",
"@angular/platform-browser-dynamic": "2.0.0-rc.5",
"@angular/router": "3.0.0-rc.1",
"@angular/forms": "0.3.0",
"@angular/http": "2.0.0-rc.5",
"es6-shim": "^0.35.0",
"reflect-metadata": "0.1.3",
"rxjs": "5.0.0-beta.6",
"systemjs": "0.19.26",
"bootstrap": "^3.3.6",
"zone.js": "^0.6.12"
angular
angular2-forms
angular2-pipe
Sumama Waheed
la source
la source
Réponses:
Assurez-vous que vous n'êtes pas confronté à un problème de "module croisé"
Si le composant qui utilise le tube n'appartient pas au module qui a déclaré le composant de tube "globalement", le tube n'est pas trouvé et vous obtenez ce message d'erreur.
Dans mon cas, j'ai déclaré le tube dans un module séparé et importé ce module de tube dans n'importe quel autre module ayant des composants utilisant le tube.
J'ai déclaré que le composant dans lequel vous utilisez le tuyau est
le module de canalisation
Utilisation dans un autre module (par exemple app.module)
la source
Vous devez inclure votre pipe dans la déclaration du module:
la source
You must include your pipe in the declarations array of the AppModule.
: angular.io/guide/pipes . Quoi qu'il en soit, votre réponse résout également mon problème.exports: [UsersPipe]
si le module va être importé par d'autres modules.Pour Ionic, vous pouvez faire face à plusieurs problèmes comme @Karl l'a mentionné. La solution qui fonctionne parfaitement pour les pages chargées paresseusement ioniques est:
// contenu pipes.ts (il peut avoir plusieurs tuyaux à l'intérieur, n'oubliez pas de
// contenu de pipes.module.ts
Inclure PipesModule dans la section importations app.module et @NgModule
import { PipesModule } from "../pipes/pipes.module"; @NgModule({ imports: [ PipesModule ] });
Incluez PipesModule dans chacun de vos .module.ts où vous souhaitez utiliser des canaux personnalisés. N'oubliez pas de l'ajouter dans la section importations. // Exemple. fichier: pages / ma-page-personnalisée / ma-page-personnalisée.module.ts
import { PipesModule } from "../../pipes/pipes.module"; @NgModule({ imports: [ PipesModule ] })
C'est tout. Vous pouvez maintenant utiliser votre tuyau personnalisé dans votre modèle. Ex.
<div *ngFor="let prop of myObject | toArray">{{ prop.key }}</div>
la source
J'ai trouvé la réponse «module croisé» ci-dessus très utile à ma situation, mais je voudrais développer cela, car il y a une autre ride à considérer. Si vous avez un sous-module, il ne peut pas non plus voir les tuyaux dans le module parent dans mes tests. Pour cette raison également, vous devrez peut-être insérer des tuyaux dans leur propre module séparé.
Voici un résumé des étapes que j'ai suivies pour traiter les tuyaux qui ne sont pas visibles dans le sous-module:
Une autre note de bas de page à la réponse "cross module" ci-dessus: quand j'ai créé le PipeModule, j'ai supprimé la méthode statique forRoot et importé PipeModule sans cela dans mon module partagé. Ma compréhension de base est que forRoot est utile pour des scénarios tels que les singletons, qui ne s'appliquent pas nécessairement aux filtres.
la source
Suggérer une alternative réponse ici:
Il n'est pas nécessaire de créer un module séparé pour le tuyau , mais c'est certainement une alternative. Consultez la note de bas de page officielle de la documentation: https://angular.io/guide/pipes#custom-pipes
Tout ce que vous avez à faire est d'ajouter votre tube au tableau des déclarations et le tableau des fournisseurs à l'
module
endroit où vous souhaitez utiliser le tube.la source
Remarque : uniquement si vous n'utilisez pas de modules angulaires
Pour une raison quelconque, ce n'est pas dans la documentation mais j'ai dû importer le tuyau personnalisé dans le composant
la source
la source
J'ai créé un module pour les tubes dans le même répertoire où mes tubes sont présents
Maintenant, importez ce module dans app.module:
Maintenant, il peut être utilisé en important le même dans le module imbriqué
la source