0

데이터를 공유하고 싶습니다. 사용자 지정 파이프와 지시문이 있습니다. 나는 이것을 처리해야하는 서비스를 만들었습니다. 나는 다음과 같은 오류가 발생합니다 :파이프에 서비스를 제공 할 공급자가 없습니다.

@Injectable() 
export class MyService { 
    private data: any; 
    get Data():any { 
     return this.data; 
    } 
    set Data(d: any) { 
     this.data = d; 
    } 
} 

서비스를 제공해야하는 지침 :

@Directive({ 
    selector: '[my-directive]', 
    providers: [MyService], 
}) 
export class MyDirective { 
    constructor(private serv: MyService) {} 
} 

는 파이프뿐만 아니라 서비스를받을해야이 때 사용 여기

Error: No provider for MyService

코드입니다 동일한 구성 요소에 :

@Pipe({ 
    name: 'myPipe' 
}) 
export class MyPipe { 
    constructor(private serv: MyService) {} 
    transform(value: any) { 
     return value + 'foo'; 
    } 
} 

이이 같은 입력에 예를 들어 사용됩니다

<input [value]="text | myPipe" my-directive /> 

내가 DI에 angular2 문서를 읽고,이 주제에 대한 검색 후, 나는 내가 잘못했는지 아무것도 찾을 수 없습니다. 내가 아는 바로는 이것이 효과가있다. 왜 어떤 아이디어가 있지 않습니까?

PS : Ionic2와

답변

0

시도를 각 2.X를 사용하여 배관이 지시어가있는 구성 요소로 제공 배열을 추가 할 수 있습니다. 나는 그것이 효과가 있어야한다고 생각한다.

+0

불행히도 나는 다른 사람이 사용하려고하는 제 3의 지시문을 작성하려고하기 때문에 그렇게 할 수 없습니다. 따라서이 지시문을 사용할 구성 요소에 액세스 할 수 없습니다. – zolipapa

+0

이 경우 MyModule.forRoot의 모듈 정의에 공급자를 추가해야합니다. –

0

ngModule.providers에서 서비스를 선언하고 나중에 그것을 사용하려는 생성자를 삽입 할 수 있습니다. 서비스가 다른 모듈의 일부인 경우 해당 모듈을 가져와야합니다. 일단 당신이 공급자에있는 서비스가 있으면 당신은 당신의 파이프 또는 지침에있는 공급자에서 선언 할 필요가 없습니다.

이 서비스를 사용하는 모든 구성 요소 또는 파이프에서 새 인스턴스를 원한다면이 부분을 ngModule.providers로 만들지 말고 모든 파이프 또는 지시문의 공급자에서 선언해야합니다.

+0

그러면 내 서비스를 삽입하는 모든 지시문에 동일한 서비스 인스턴스가 생깁니다. 내가 성취하고자하는 것은 템플릿에 배치 된 모든 지시문 인스턴스에 대해 서비스 인스턴스를 다르게하는 것입니다. – zolipapa

관련 문제