Angular 9中的依赖注入
Angular 9给我们带来了一些新的依赖注入选项。在本文中,我们将了解这些不同的选项。
让我们从最常见的用例开始,即使用根注射器。
' root '中提供的可注射
根是一段时间前在Angular 6中添加的选项。当你用下面的命令创建一个新服务时,Angular CLI会把这个选项作为默认选项:Ng生成服务.
下面是它的语法:
import {Injectable} from @angular/core;@Injectable ({
providedIn:“根”
})
导出类MyService {
}
使用该语法时,服务将在根注射器的水平。这意味着您的服务将是一个全球单例它可以被注入到应用程序的任何地方。
使用该语法类似于将服务添加到main的提供者数组中AppModule,但有一个关键的区别providedIn:“根”语法使您的服务可摇树。
摇树是什么意思?
这意味着如果某个服务最终没有被你的应用程序使用,Angular编译器就会从你的产品版本中移除该服务,从而生成一个更小、更快的应用程序。
编写服务而不使用它是不可能的。这个特性对你的依赖关系更有用:你可以使用一个组件库(比如Angular Material),但只使用该库中10%的可用服务。
如果这个库的服务考虑到了摇树性,那么你的Angular构建就能够排除90%你的应用不需要的服务。
“平台”提供可注射功能
平台是Angular 9+中提供的两个新选项之一。
语法非常简单:
@Injectable ({
providedIn:“平台”
})
导出类ProvidedInPlatformService {
}
如果你在一个网页上运行多个Angular应用,这种类型的依赖注入尤其有趣。那是因为使用的时候平台,你的服务现在是a平台级的全局单例,并在你页面上的所有Angular应用程序之间共享。
换句话说,平台提供的服务可以让你在运行在同一个浏览器选项卡中的多个Angular应用程序之间共享信息。
为什么我们需要这个选项?
虽然这看起来不常见,但请记住这一点角元素是自包含的组件,其行为类似于迷你angular应用程序。
如果你使用的是Angular元素,那么平台选项允许你在不同的Angular元素之间共享服务,这在以前是不可能的。
“any”中提供的可注射
任何是添加到Angular 9中的最后一个选项。与任何, Angular会在每个注入服务的模块中提供一个唯一的服务实例。
@Injectable ({
providedIn:“任何”
})
导出类ProvidedInAnyService {
}
换句话说,如果您的应用程序中有三个不同的模块,其中两个使用上述服务,那么您最终将得到该服务的两个不同实例,每个模块中一个实例注入该服务。
你可以使用下面的Stackblitz演示来尝试这些不同的选项(https://stackblitz.com/github/alcfeoh/ng9-di-demo):
我叫betway必威滚球.我是谷歌的Angular开发专家,也是在角训练在那里我帮助开发团队学习并熟练使用Angular。
需要Angular的帮助吗?我们约个时间谈谈吧.
如果你喜欢这篇文章,请鼓掌或分享。你的帮助我永远感激。