2015-10-28 9 views
5

Dies ist der nächstgelegene ich on githubAngular2 DI mit ES2016 Dekoratoren?

Mein Service bekommen haben ist

@Injectable() export class TodoService {}

Aber ich bin nicht sicher, wie es in meiner Komponente zu injizieren ES2016 Dekorateure verwenden. Ist es überhaupt möglich, oder sind die Dekorateure Typoskript-spezifisch? Ich weiß in TS gibt es eine emitDecoratorMetadata Option.

Antwort

5
  1. Verwendung providers oder viewProviders zu "liefern" Dienst für die Komponente:

  2. Injekt Dienst in der Komponente Konstruktorparameter Typen spezifiziert:

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    constructor(todoService: TodoService) { 
    this.todoService = todoService; 
    } 
} 

oder Inject Parameter decorator verwenden.

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    constructor(@Inject(TodoService) todoService) { 
    this.todoService = todoService; 
    } 
} 

Parameter Dekorateure nicht Teil der ES2016 sind (Sie es als Typoskript spezifische betrachten kann). Aber sie können added to the standard later sein).

Wenn Sie wirklich ES6/ES7 verwenden möchten, verwenden Sie statische Getter für parameters:

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    static get parameters() { 
    return [[TodoService]]; // you can also return just [TodoService] 
    } 

    constructor(todoService) { 
    this.todoService = todoService; 
    } 
} 

Auch ich Ihnen empfehlen angular2 Dependency Injection besser zu lesen this article zu verstehen.

+0

Also beide dieser Implementierungen Typescript-spezifisch? Es gibt keine Möglichkeit, ES2016-Dekoratoren zu verwenden (ohne Parameter-Dekoratoren, danke für den Link)? – iksose

+0

@iksose Ich habe ein Beispiel für ES6/ES7 hinzugefügt – alexpods

+0

Perfekt! Funktioniert wunderbar, danke @alexpods – iksose