为什么 Angular CLI 不自动在提供程序数组中添加服务?



当我们创建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数组中。

相关内容

  • 没有找到相关文章

最新更新