这是我得到的最接近的on github
我的服务是
@Injectable()
导出类 TodoService {}
但我不确定如何使用 ES2016 装饰器将它注入(inject)到我的组件中。甚至有可能,还是装饰器是 Typescript 特定的?我知道在 TS 中有一个 emitDecoratorMetadata
选项。
最佳答案
使用 providers或 viewProviders为组件“提供”服务:
将服务注入(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/