2015-10-28 5 views
5

Это ближайший я получил on githubAngular2 DI с декораторами ES2016?

Моя служба

@Injectable() export class TodoService {}

Но я не уверен в том, чтобы ввести его в свой компонент, используя ES2016 декораторов. Возможно ли это, или являются декораторами, специфичными для скриптов? Я знаю, что в TS есть опция emitDecoratorMetadata.

ответ

5
  1. Использование providers или viewProviders "предоставлять" услуги по компоненте:

  2. Inject служба в компонент конструктора определение типов параметров:

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

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

или с помощью Inject параметра декоратора.

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

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

Декораторы параметров не являются частью ES2016 (вы можете рассматривать его как специфический для TypeScript). Но они могут быть added to the standard later).

Если вы действительно хотите использовать ES6/ES7, использовать статический поглотитель для parameters:

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

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

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

Кроме того, я рекомендую вам прочитать this article, чтобы лучше понять angular2 Dependency Injection.

+0

Итак, обе эти реализации специфичны для машинописного текста? Невозможно использовать декораторы ES2016 (которые не включают декораторы параметров, спасибо за ссылку)? – iksose

+0

@iksose Я добавил пример для ES6/ES7 – alexpods

+0

Отлично! Работает чудесно, спасибо @alexpods – iksose