2016-02-07 17 views
15

Come posso iniettare dipendenze come un servizio in tubi angolari2?Iniezione di dipendenza angolare 2 nelle condotte

import {Pipe, PipeTransform} from 'angular2/core'; 
import {MyService} from './service'; 

//How i am injecting MyService to the pipe? 

@Pipe({name: 'exponentialStrength'}) 
export class ExponentialStrengthPipe implements PipeTransform { 
    transform(value:number, args:string[]) : any { 
    return Math.pow(value, parseInt(args[0] || '1', 10)); 
    } 
} 

risposta

30

È possibile iniettare la dipendenza nel costruttore in questo modo:

export class ExponentialStrengthPipe implements PipeTransform { 

    constructor(public testService: TestService) { 

    } 

    transform(value:number, args:string[]) : any { 
    // you can access this.testService here 
    return Math.pow(value, parseInt(args[0] || '1', 10)); 
    } 
} 

Non dimenticare di fare in modo di aggiungere questa dipendenza al modulo app:

@NgModule({ 
    declarations: [...], 
    imports: [...], 
    providers: [..., TestService], 
    bootstrap: [AppComponent], 
} 
+0

Grazie! Sai se esiste un modo per iniettare 'TestService' solo per il Pipe invece dell'intera applicazione? per esempio. Con una matrice 'providers'. – maximedupre

+0

Non credo sia possibile. Il decoratore di pipe eccetto il nome e le proprietà pure. – Bazinga

+1

@maximedupre potresti usare un 'NgModule' che dichiara solo la tua pipa. Il 'TestService' verrebbe fornito solo in quel modulo, quindi' TestService' è disponibile solo per la pipe e non per l'intera applicazione. –