2016-02-07 14 views
15

Wie kann ich Abhängigkeiten wie einen Service in angular2 pipes einfügen?Angular 2 Abhängigkeitsinjektion in Rohrleitungen

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

Antwort

30

Sie können die Abhängigkeit im Konstruktor wie folgt injizieren:

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

nicht zu machen Vergessen Sie sicher, dass Sie diese Abhängigkeit zu der App-Modul hinzufügen:

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

Danke! Wissen Sie, ob es eine Möglichkeit gibt, 'TestService' nur für die Pipe anstelle der gesamten Anwendung zu injizieren? z.B. Mit einem 'Provider'-Array. – maximedupre

+0

Ich glaube nicht, dass es möglich ist. Der Rohrdekorator nur außer Name und reinen Eigenschaften. – Bazinga

+1

@maximedupre könnten Sie ein 'NgModule' verwenden, das nur Ihre Pipe deklariert. Der 'TestService' würde nur in diesem Modul zur Verfügung gestellt werden, daher ist der' TestService' nur für die Pipe und nicht für die gesamte Anwendung verfügbar. –

Verwandte Themen