Angular2: custom pipe could not be found
Solution 1
see this is working for me.
ActStatus.pipe.ts First this is my pipe
import {Pipe,PipeTransform} from "@angular/core";
@Pipe({
name:'actStatusPipe'
})
export class ActStatusPipe implements PipeTransform{
transform(status:any):any{
switch (status) {
case 1:
return "UN_PUBLISH";
case 2:
return "PUBLISH";
default:
return status
}
}
}
main-pipe.module.ts in pipe module, i need to declare my pipe/s and export it.
import { NgModule } from '@angular/core';
import {CommonModule} from "@angular/common";
import {ActStatusPipe} from "./ActStatusPipe.pipe"; // <---
@NgModule({
declarations:[ActStatusPipe], // <---
imports:[CommonModule],
exports:[ActStatusPipe] // <---
})
export class MainPipe{}
app.module.ts user this pipe module in any module.
@NgModule({
declarations: [...],
imports: [..., MainPipe], // <---
providers: [...],
bootstrap: [AppComponent]
})
you can directly user pipe in this module. but if you feel that your pipe is used with in more than one component i suggest you to follow my approach.
- create pipe .
- create separate module and declare and export one or more pipe.
- user that pipe module.
How to use pipe totally depends on your project complexity and requirement. you might have just one pipe which used only once in the whole project. in that case you can directly use it without creating a pipe/s module (module approach).
Solution 2
This didnt worked for me. (Im with Angular 2.1.2). I had NOT to import MainPipeModule in app.module.ts and importe it instead in the module where the component Im using the pipe is imported too.
Looks like if your component is declared and imported in a different module, you need to include your PipeModule in that module too.
Solution 3
A really dumb answer (I'll vote myself down in a minute), but this worked for me:
After adding your pipe, if you're still getting the errors and are running your Angular site using "ng serve
", stop it... then start it up again.
For me, none of the other suggestions worked, but simply stopping, then restarting "ng serve
" was enough to make the error go away.
Strange.
Solution 4
I take no issue with the accepted answer as it certainly helped me. However, after implementing it, I still got the same error.
Turns out this was because I was calling the pipes incorrectly in my component as well:
My custom-pipe.ts file:
@Pipe({ name: 'doSomething' })
export class doSomethingPipe implements PipeTransform {
transform(input: string): string {
// Do something
}
}
So far, so good, but in my component.html file I was calling the pipes as follows:
{{ myData | doSomethingPipe }}
This will again throw the error that the pipe is not found. This is because Angular looks up the pipes by the name defined in the Pipe decorator. So in my example, the pipe should instead be called like this:
{{ myData | doSomething }}
Silly mistake, but it cost me a fair amount of time. Hope this helps!
Solution 5
import {CommonModule} from "@angular/common";
Adding this statement to the pipe module solved my problem.
rui
Updated on January 21, 2022Comments
-
rui over 2 years
The built-in pipe is work,but all custom pipes that i wanna use are the same error:
the pipe 'actStatusPipe' could not be found
[ERROR ->]{{data.actStatus | actStatusPipe}}
I have tried two ways,declare it in app.module's declarations:
app.module.ts:
import {ActStatusPipe} from '../pipe/actPipe' @NgModule({ declarations: [ AppComponent, HomePage, ActivitiesList, ActStatusPipe ], ... })
or use other module to declare and export all my pipes: //pipe
import {ActStatusPipe} from "./actPipe" @NgModule({ declarations:[ActStatusPipe], imports:[CommonModule], exports:[ActStatusPipe] }) export class MainPipe{}
and import it in app.module.
//pipe import {MainPipe} from '../pipe/pipe.module' @NgModule({ declarations:[...], imports:[...,MainPipe], })
But none of them work in my app.
Here is my code of the pipe:
import {Pipe,PipeTransform} from "@angular/core"; @Pipe({ name:'actStatusPipe' }) export class ActStatusPipe implements PipeTransform{ transform(status:any):any{ switch (status) { case 1: return "UN_PUBLISH"; case 2: return "PUBLISH"; default: return status } } }
I think it is most of the same with the document(In fact,i have just copied from the document and made a little modification)
And my angular2's version is 2.1.
Lots of solution that can be searched in stackOverflow and google are tried in my app,however they don't work.
This confused me a lot,thanks for you answer!
-
rui over 7 yearsFinally i find out it is because i import the pipe at the root module,and use it in a component import by other module.I just think it will work globally before and the bug is caused by my pipe. Your answer inspire me to find out this,thanks for your help!
-
Phil almost 7 yearsWhat? That makes no sense. There isn't a global import for something like this?
-
Shashank Gaurav over 6 years@rui Your comment saved my day.. I was also having same issue.. hahaha
-
SeanMC about 6 yearsbut what if you need to import it in 2 modules? I find that doesn't work. I get a console error saying to use it in a higher module instead of 2 modules, but then app module doesn't do the trick
-
GBarroso about 6 years@rui same as above, your comment saved me
-
Rhyous almost 6 years@Rui, can you be more clear about how you solved this.
-
ykadaru about 5 yearsAdding a pipe to its own module is not required - it's just an alternative. The official docs (angular.io/guide/pipes#custom-pipes) says Pipes have to be declared and provided, so it can be injectible.
-
Vinay Pandya about 5 yearsi think that what happening here, i am declaring ActStatusPipe in MainPipe module (which may have multiple pipes), and than importing that MainPipe module, so i can use all of the pipes.
-
Vinay Pandya about 5 yearsthat alternate ans is also mentioned in my answer.
-
Vinay Pandya about 5 yearsyes that is the way angular works, but if you want use that pipe module through out your angular app you can import in app.module.ts and if you want use that pipe in specific module, you need to import pipe module in that module only.
-
Valen about 4 years"90% of angular (material) problems are solved by importing the correct module"
-
Ray Andison almost 4 years90% of angular problems are caused by poor documentation
-
Guillaume over 3 yearsPlease, do Not ask me how long it took me to find out…
-
H3AR7B3A7 almost 3 yearsIt is advised to no longer user the 'providers: [ ] ' array for things like services and pipes when it is not needed. A custom pipe should just be imported and declared.