Angular2 DI与ES2016装饰器?

iks*_*ose 5 ecmascript-7 angular

这是我在github上最接近的

我的服务是

@Injectable() export class TodoService {}

但我不确定如何使用ES2016装饰器将其注入我的组件.它甚至是可能的,还是装饰器特定于原型?我知道TS有一个emitDecoratorMetadata选择.

ale*_*ods 5

  1. 使用providerviewProviders为组件"提供"服务:

  2. 将服务注入指定参数类型的组件构造函数:

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

  constructor(todoService: TodoService) {
    this.todoService = todoService;
  }
}
Run Code Online (Sandbox Code Playgroud)

或使用Inject参数装饰器.

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

  constructor(@Inject(TodoService) todoService) {
    this.todoService = todoService;
  }
} 
Run Code Online (Sandbox Code Playgroud)

参数装饰器不是ES2016的一部分(您可以将其视为特定于TypeScript).但它们可以在以后添加到标准中).

如果您真的想使用ES6/ES7,请使用静态getter parameters:

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

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

  constructor(todoService) {
    this.todoService = todoService;
  }
} 
Run Code Online (Sandbox Code Playgroud)

另外,我建议您阅读本文以更好地理解angular2依赖注入.