Angular 2 @Injectable() - 它是如何工作的

Angular 2 @Injectable() - how it works

我正在尝试了解在 angular 2.

的服务中添加 @Injectable() 装饰的必要性

来自文档:https://angular.io/docs/ts/latest/guide/dependency-injection.html

Why don't we add @Injectable() to the HeroesComponent? We can add it if we really want to. It isn't necessary because the HeroesComponent is already decorated with @Component. TypeScript generates metadata for any class with a decorator and any decorator will do.

所以基本上你只需要添加 @Injectable() 如果没有其他装饰可用,因为如果有任何类型的装饰可用,typescript编译器会根据你传递的变量自动生成依赖信息在构造函数中,例如:constructor(private logger: Logger)

这样对吗? 谢谢

我觉得这个名字有点奇怪,我真的不明白为什么他们告诉你为了最佳实践添加它。如果将它添加到每个 class 是最佳实践,我根本不明白为什么需要它。如果构造函数需要注入东西,让框架检查每个 class 会更容易。这可以通过打字稿上的命令行 属性 始终生成(模拟)元数据来解决。

始终添加它的建议,我想类似于让编译器始终添加元数据(据我所知这是不可能的)。您也可以(保持警惕)仅(并且始终)将其添加到需要注入东西的 classes - 即使它们有另一个装饰器。这可能是最明确的解决方案 - 但是,嘿 - 草率既可能是一件坏事,也可能是一件好事。你将成为本案的法官。

TL;DR 如果你没有其他装饰器 AND你如果你的构造函数需要services/etc注入然后 你需要它。