为啥要在 Angular 中设置依赖提供者?

Posted

技术标签:

【中文标题】为啥要在 Angular 中设置依赖提供者?【英文标题】:Why set up Dependency providers in angular?为什么要在 Angular 中设置依赖提供者? 【发布时间】:2021-05-29 12:00:08 【问题描述】:

我使用以下代码在 Angular 中创建了一些服务,其中 provideIn 作为 root。

@Injectable(
    providedIn: 'root'

这使得该服务可用于整个应用程序,我可以在任何我喜欢的地方导入它。这似乎很容易做到并且非常直观。但我正在阅读 Angular 文档并遇到了Angular Dependency providers。我理解它背后的概念是仅将服务公开给那些需要它的组件。但是我不明白这个有什么用?我们可以在根级别提供服务并在需要时访问。配置依赖提供程序是否有任何优化好处,或者仅仅是因为安全原因或任何其他原因?

【问题讨论】:

【参考方案1】:

您设置提供程序的方式仅取决于您的用例。许多解决方案都是可能的。 你可以在这里找到所有的细节 https://angular.io/guide/providers

【讨论】:

我正在研究更深入的知识。这些文档非常适合帮助如何实现一项功能,但他们没有说明为什么要使用一种方法而不是其他方法。【参考方案2】:

所以在向社区询问并在线搜索后,我得出了这个结论。

单例服务

Beginning with Angular 6.0, the preferred way to create a singleton service is to set providedIn to root on the service's @Injectable() decorator. This tells Angular to provide the service in the application root. 这意味着我们应该使用 root 关键字,因为它执行一些优化(之前,您必须在某个模块中提供每个服务。这意味着您必须注意服务实际上是在某个地方提供的,而且它也意味着未使用的服务仍将被打包到您的包中(摇树),并且是 Angular 设计模式推荐的。请记住,此方法会创建该服务的单个实例。

【讨论】:

以上是关于为啥要在 Angular 中设置依赖提供者?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular/Ionic 框架中设置离子输入的样式?

在Angular2的选择列表中设置最初选择的项目

XSRF 标头未在 AngularJS 中设置

Angular 测试中没有 $injector 的提供者

为啥要在 API 响应中提供分页信息?

为什么要在沙河中设置小堤坝?