7

我试图了解@Injectable()在 Angular 2 中添加服务装饰的必要性。

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

为什么不给 HeroesComponent 添加@Injectable() 呢?如果我们真的想添加它,我们可以添加它。这不是必需的,因为 HeroesComponent 已经用 @Component 装饰了。TypeScript 为任何带有装饰器的类生成元数据,任何装饰器都可以。

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

这是正确的吗?谢谢

4

1 回答 1

9

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

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

TL;DR 如果您没有其他装饰器 并且的构造函数需要注入服务/等那么您需要它。

于 2016-01-05T13:14:04.093 回答