我们可以在 Angular 模块或组件/自定义指令中注册提供者吗?
为什么 Angular 团队允许在模块或组件/自定义指令中注册提供者?有人可以用实际的例子来说明利弊吗?
最佳答案
Why angular team allowed to register a provider either at module or component / custom directive?
那是因为它们的范围不同。在非延迟加载模块级别注册的提供程序将可用于整个应用程序中的任何组件。在组件级别注册的提供程序仅可用于组件及其子级。
在只有一个应用程序级别范围的 AngularJS 工作了几年后,我认为当前的 Angular 范围注入(inject)器实现是向前迈出的一大步。为了更好地理解好处,假设您正在开发一个带有小部件的仪表板。用户界面如下所示:
因此,您希望有一个特殊的类负责每个小部件的管理。并且您希望小部件内的所有组件都获得特定于其小部件的服务实例。在 AngularJS 中,这将很难实现,因为如果我们在应用程序级别注册此服务,则只会创建一个实例。但在 Angular 中,这个问题很容易解决。我们在 WidgetComponent 注册服务,然后该组件的子组件将注入(inject)他们自己的服务实例。
关于angular - 在模块 Vs 组件/指令中注册提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45845223/