这是我最接近的
on github
我的服务是
@Injectable()
导出类TodoService {}
但我不确定如何使用ES2016装饰器将其注入我的组件.它甚至是可能的,还是装饰器特定于原型?我在TS中知道有一个emitDecoratorMetadata选项.
解决方法
>使用
providers或
viewProviders为组件“提供”服务:
>将服务注入到指定参数类型的组件构造函数中:
>将服务注入到指定参数类型的组件构造函数中:
@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,请使用静态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依赖注入.