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