为什么我们不需要将 built-in Angular 服务添加到 provider 但它仍然有效?

Why don`t we need to add built-in Angular Services into provider but it still works?

我正在学习一个教程,它以“Title”built-in 服务为例。

导入服务到组件Ts文件

import { Title } from '@angular/platform-browser';

然后注入构造函数并设置标题。

constructor(private title: Title){ this.title.setTitle('My Title'); }

如果我 运行 应用程序,它工作正常并且我没有收到任何“没有标题的提供者”错误,因为它根本没有提供到任何地方。但这违反了 Angular 服务规则。

您能否解释一下 built-in 服务在添加到提供商时是否异常?

如文档所述,Title 服务在应用程序的 root 中提供: https://angular.io/api/platform-browser/Title#provided-in

这意味着 Title 服务是用 providedIn 配置定义的。 Injectable 处的 providedIn 提供了一种通过 DI 提供依赖项的替代方法,如果使用这种方法,则无需通过模块配置中的 providers 数组提供服务。 在此处查看有关 providedIn 的更多详细信息:https://angular.io/guide/providers#providing-a-service