5

这是我在 github 上得到的最接近的

我的服务是

@Injectable() export class TodoService {}

但我不确定如何使用 ES2016 装饰器将它注入到我的组件中。是否有可能,或者装饰器是特定于 Typescript 的?我知道在 TS 中有一个emitDecoratorMetadata选项。

4

1 回答 1

5
  1. 使用providerviewProviders为组件“提供”服务:

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

@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)。但它们可以稍后添加到标准中)。

如果您真的想使用 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;
  }
} 

另外,我建议您阅读这篇文章以更好地理解 angular2 依赖注入。

于 2015-10-28T21:01:48.207 回答