2015-10-28 36 views
5

Jest to najbliżej stałam on githubAngular2 DI z dekoratorami ES2016?

Moja usługa jest

@Injectable() export class TodoService {}

Ale jestem pewien sposób wstrzyknąć go do mojego składnika przy użyciu ES2016 dekoratorów. Czy to w ogóle możliwe, czy też dekoratory są specyficzne dla maszynopisu? Wiem, że w TS istnieje opcja emitDecoratorMetadata.

Odpowiedz

5
  1. Zastosowanie providers lub viewProviders "zapewnienie" Obsługa składowej: obsługa

  2. wprowadzić do konstruktora składnika określenia typów parametrów:

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

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

lub za pomocą Inject parametru dekoratora.

Dekoratory parametrów nie wchodzą w skład zestawu ES2016 (można go uznać za specyficzny dla TypeScript). Ale mogą być added to the standard later).

Jeśli naprawdę chcesz używać ES6/ES7 użyć getter statycznego dla parameters:

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

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

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

Również polecam do zapoznania this article lepiej zrozumieć angular2 Dependency Injection.

+0

Więc obie te implementacje są specyficzne dla maszynopisu? Nie ma możliwości użycia dekoratorów ES2016 (które nie zawierają dekoratorów parametrów, dzięki za link)? – iksose

+0

@iksose Dodałem przykład dla ES6/ES7 – alexpods

+0

Perfect! Działa cudownie, dzięki @alexpods – iksose