Angular2 DI 与 ES2016 装饰器?

标签 angular ecmascript-2016

这是我得到的最接近的on github

我的服务是

@Injectable() 导出类 TodoService {}

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

最佳答案

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

  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使用static getter:

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

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

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

此外,我建议您阅读 this article更好地理解 angular2 依赖注入(inject)。

关于Angular2 DI 与 ES2016 装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400693/

相关文章:

angular - 无法匹配任何路由 : base href suffix

angular - RXJS-BehaviorSubject : proper use of .值

java - 发布开关输入 boolean 值(React/Typescript)

windows - Windows 7 上的 Internet Explorer 11 之后是什么? ES2016 在企业中的支持情况如何?

javascript - Jasmine 时钟是如何工作的?

javascript - 为什么在 Electron 项目中需要 Babel

angular - 使用 Angular 进行获取和订阅时,如何忽略表中的第一条记录?

javascript - angular2 和 materializecss 集成

css - 使用 Angular Material 在sidenav中添加标题

node.js - 使用 es7 async/await 检查 mongodb 中是否存在文档