angularangular2-formsangular2-pipe

The pipe ' ' could not be found angular2 custom pipe


I can't seem to fix this error. I have a search bar and an ngFor. I am trying to filter the array using a custom pipe like this:

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>

Error:

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)">

Angular versions:

"@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"

Solution

  • Make sure you are not facing a "cross module" problem

    If the component which is using the pipe, doesn't belong to the module which has declared the pipe component "globally" then the pipe is not found and you get this error message.

    In my case I've declared the pipe in a separate module and imported this pipe module in any other module having components using the pipe.

    I have declared a that the component in which you are using the pipe is

    the Pipe Module

     import { NgModule }      from '@angular/core';
     import { myDateFormat }          from '../directives/myDateFormat';
    
     @NgModule({
         imports:        [],
         declarations:   [myDateFormat],
         exports:        [myDateFormat],
     })
    
     export class PipeModule {
    
       static forRoot() {
          return {
              ngModule: PipeModule,
              providers: [],
          };
       }
     } 
    

    Usage in another module (e.g. app.module)

      // Import APPLICATION MODULES
      ...
      import { PipeModule }    from './tools/PipeModule';
    
      @NgModule({
         imports: [
        ...
        , PipeModule.forRoot()
        ....
      ],