Angular2 : 사용자 지정 파이프를 찾을 수 없습니다.


79

내장 파이프는 작동하지만 사용하려는 모든 사용자 정의 파이프는 동일한 오류입니다.

파이프 'actStatusPipe'를 찾을 수 없습니다.

[오류->] {{data.actStatus | actStatusPipe}}

두 가지 방법을 시도했으며 app.module의 선언에서 선언했습니다.

app.module.ts :

import {ActStatusPipe} from '../pipe/actPipe'

@NgModule({
    declarations: [
        AppComponent,
        HomePage,
        ActivitiesList,
        ActStatusPipe
    ],
    ...
})

또는 다른 모듈을 사용하여 모든 파이프를 선언하고 내 보냅니다. // pipe

import {ActStatusPipe} from "./actPipe"

@NgModule({
    declarations:[ActStatusPipe],
    imports:[CommonModule],
    exports:[ActStatusPipe]
})

export class MainPipe{}

app.module에서 가져옵니다.

//pipe
import {MainPipe} from '../pipe/pipe.module'
    
@NgModule({
    declarations:[...],
    imports:[...,MainPipe],
})

그러나 그들 중 어느 것도 내 앱에서 작동하지 않습니다.

다음은 파이프 코드입니다.

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
        }
    }
}

문서와 거의 동일하다고 생각합니다.

그리고 내 angular2의 버전은 2.1입니다.

stackOverflow 및 google에서 검색 할 수있는 많은 솔루션이 내 앱에서 시도되지만 작동하지 않습니다.

이로 인해 많이 혼란 스러웠습니다. 답변 해 주셔서 감사합니다!


플 런커에서 재현 할 수 있습니까?
yurzui 2016

코드에 많은 혼란이 있습니다. 먼저 간단하게 만들려고합니다. 사용자 지정 파이프를 만들고 선언을 추가합니다. [AppComponent, CapitalizePipe] NgModule () 배열. 그것이 작동한다는 것을 알려주는 것보다?
Vinay Pandya

@yurzui 나는 퇴근 후에 시도 할 것
루이

@VinayPandya 오류 메시지는 다음과 같습니다. 템플릿 구문 분석 오류 : 파이프 'actStatusPipe'를 찾을 수 없습니다
rui

난 그냥이 당신의 파이프를 복사 그것은 나를 위해 작동
인 Vinay 디야

답변:


98

이것이 나를 위해 일하는 것을보십시오.

ActStatus.pipe.ts 먼저 이것은 내 파이프입니다.

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 , 파이프를 선언하고 내 보내야 합니다.

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 는 모든 모듈에서이 파이프 모듈을 사용합니다.

@NgModule({
  declarations: [...],
  imports: [..., MainPipe], // <---
  providers: [...],
  bootstrap: [AppComponent]
})

이 모듈에서 직접 파이프를 사용할 수 있습니다. 그러나 파이프가 두 개 이상의 구성 요소에서 사용된다고 생각되면 내 접근 방식을 따르는 것이 좋습니다.

  1. 파이프를 만듭니다.
  2. 별도의 모듈을 만들고 하나 이상의 파이프를 선언하고 내 보냅니다.
  3. 파이프 모듈을 사용하십시오.

파이프를 사용하는 방법은 프로젝트 복잡성과 요구 사항에 따라 다릅니다. 전체 프로젝트에서 한 번만 사용 된 파이프가 하나만있을 수 있습니다. 이 경우 파이프 / s 모듈 (모듈 접근 방식)을 생성하지 않고 직접 사용할 수 있습니다.


16
마지막으로 루트 모듈에서 파이프를 가져오고 다른 모듈의 구성 요소 가져 오기에서 사용하기 때문이라는 것을 알게되었습니다. 이전에는 전 세계적으로 작동하고 파이프로 인해 버그가 발생한다고 생각합니다. 귀하의 답변은이 사실을 알 수 있도록 영감을줍니다. 도와 주셔서 감사합니다!
rui

@rui 귀하의 의견은 나 또한 같은 문제가 발생했다 .. 내 일을 저장 .. 하하하
Shashank Gaurav

@rui 상기와 같은, 당신의 의견은 나 저장
GBarroso

3
@Rui,이 문제를 어떻게 해결했는지 더 명확하게 알 수 있습니까?
Rhyous

1
자체 모듈에 파이프를 추가 할 필요는 없습니다 . 단지 대안 일뿐입니다. 공식 문서는 ( angular.io/guide/pipes#custom-pipes ) 파이프되어야한다라고 선언제공 그래서 할 수 있습니다, 주사 가능 .
ykadaru

21

이것은 나를 위해 일하지 않았습니다. (Im Angular 2.1.2). app.module.ts에서 MainPipeModule을 가져 오지 않고 파이프를 사용하는 구성 요소 Im도 가져 오는 모듈에서 대신 가져옵니다.

구성 요소가 선언되고 다른 모듈에서 가져온 경우 해당 모듈에도 PipeModule을 포함해야합니다.


4
뭐? 말이 안 돼. 이와 같은 글로벌 수입이 없습니까?
Phil

하지만 2 개의 모듈로 가져와야한다면 어떨까요? 작동하지 않습니다. 2 개의 모듈 대신 상위 모듈에서 사용하라는 콘솔 오류가 발생했지만 앱 모듈이 트릭을 수행하지 않습니다
SeanMC

예, 그것이 angular가 작동하는 방식이지만, angular 앱을 통해 해당 파이프 모듈을 사용하려면 app.module.ts에서 가져올 수 있으며 특정 모듈에서 해당 파이프를 사용하려면 해당 모듈에서 파이프 모듈을 가져와야합니다. 뿐.
Vinay Pandya

5

나는 확실히 도움이 되었기 때문에 받아 들여지는 대답에 문제가 없습니다. 그러나 그것을 구현 한 후에도 여전히 같은 오류가 발생했습니다.

이것은 내 구성 요소에서도 파이프를 잘못 호출했기 때문입니다.

내 custom-pipe.ts 파일 :

@Pipe({ name: 'doSomething' })
export class doSomethingPipe implements PipeTransform {
    transform(input: string): string {
        // Do something
    }
}

지금까지는 훌륭했지만 component.html 파일에서 다음과 같이 파이프를 호출했습니다.

{{ myData | doSomethingPipe }}

파이프를 찾을 수 없다는 오류가 다시 발생합니다. Angular는 파이프 데코레이터에 정의 된 이름으로 파이프를 조회하기 때문입니다. 따라서 내 예에서 파이프는 대신 다음과 같이 호출되어야합니다.

{{ myData | doSomething }}

어리석은 실수지만 상당한 시간이 소요되었습니다. 도움이 되었기를 바랍니다!


5

정말 멍청한 대답 (나는 잠시 후 투표 할 것입니다), 그러나 이것은 나를 위해 일했습니다.

파이프를 추가 한 후에도 오류가 계속 발생하고 " ng serve"를 사용하여 Angular 사이트를 실행중인 경우 중지하고 다시 시작하십시오.

나를 위해 다른 제안은 효과가 없었지만 단순히 중지했다가 " ng serve"을 ( 를) 다시 시작하는 것만으로도 오류가 사라졌습니다.

이상한.


4
import {CommonModule} from "@angular/common";

이 문을 파이프 모듈에 추가하면 내 문제가 해결되었습니다.


2
"각 (재료) 문제의 90 %는 올바른 모듈을 가져옴으로써 해결됩니다."
Valen

2
각도 문제의 90 %는 잘못된 문서화로 인해 발생합니다
Ray Andison 2010-08-14

0

다른 모듈에서 파이프를 선언하는 경우 해당 모듈의 선언 및 내보내기 배열에 파이프를 추가 한 다음 해당 파이프를 사용하는 모듈에서 해당 모듈을 가져옵니다.


0

파이프에 대한 선언이 한 모듈에서 수행되고 다른 모듈에서 파이프를 사용하는 동안 파이프를 사용하는 클래스가있는 현재 모듈에서 올바른 가져 오기 / 선언을 제공해야합니다. 제 경우에는 그것이 파이프 미스의 이유였습니다.


0

비슷한 문제가 발생했지만 내 페이지 모듈에 넣는 것이 작동하지 않았습니다.

파이프가 필요한 구성 요소를 만들었습니다. 이 구성 요소는 앱의 모든 사용자 지정 구성 요소를 포함하는 ComponentsModule 파일에서 선언되고 내보냈습니다.

이러한 구성 요소가 해당 구성 요소를 사용하는 페이지의 모듈이 아닌 이러한 파이프를 사용하려면 내 ComponentsModule에 가져 오기로 PipesModule을 넣어야했습니다.

크레딧 : 여기에 링크 설명을 입력하십시오. 답변 : tumain

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.