当我们使用命令创建Component
时,CLI 会自动将它们添加到特定模块的声明数组中,为什么在服务的情况下不会发生这种情况。Pipe
angular-cli
1 回答
在 Angular 5 之前,您需要将服务添加到providers
Angular 模块的数组中,以将其注册到 Angular 模块的注入器上。
从 Angular 6 开始,服务变成了可摇树的。
什么是摇树?
好吧,简单来说,这意味着如果您没有针对特定服务的导入语句,那么它将不会作为捆绑包的一部分添加。这将导致相对较小的捆绑包大小。
为什么在 Angular 6 之前 Angular 服务不能摇树?
在 Angular 6 之前,您需要将服务添加到
providers
Angular 模块的数组中,以便将它们注册到服务的注入器上。为了做到这一点,您必须import
在文件顶部添加一条语句以实际引用该服务。这将使它不可摇树。但是在 Angular 6 中,在装饰器的元数据中引入了该
providedIn
字段后,这种情况发生了变化。@Injectable
如果将其设置为一个值('root'
例如),则该服务将注册为依赖注入(在这种情况下为根注入器)。而且由于它将在注入器上注册以进行依赖注入,因此我们不必显式地将其添加到
providers
Angular 模块的数组中,因为它反过来会做完全相同的事情。并且不需要将其添加到声明数组中意味着不需要import
在文件顶部为其添加语句。如果不使用,这反过来会使服务树摇晃。
因此,为了回答您的问题,如果您通过 Angular CLI 在版本 6.xx 或更高版本上生成此服务,那么该服务很可能是通过providedIn: 'root'
添加到@Injectable
装饰器中生成的。所以它没有被添加到providers
Angular 模块的数组中。