gpt4 book ai didi

angular - 何时向 Angular 2 模块级别和 App 组件级别注入(inject)服务

转载 作者:太空狗 更新时间:2023-10-29 17:23:12 26 4
gpt4 key购买 nike

我一直在看 Angular 2 Getting Started in PluralSight,我看到创建的一些服务被注入(inject)到应用程序组件和模块组件中。

例子如下:

在 Angular 2 中创建 RouterGuard 时,为 RouterGuard 创建的服务被注入(inject)到模块级别,但一些自定义服务仅被注入(inject)到应用程序组件级别。我的问题是,什么时候应该将服务注入(inject)到模块级别,什么时候只注入(inject)到 App 组件级别。

谢谢!

最佳答案

事实上,您可以在模块级别和组件级别提供服务。您可以在模块级别提供服务,方法是将其列在 NgModule 的 providers 数组中,如下所示:

@NgModule({
declarations: [
...
],
imports: [
...
],
providers: [MyService],
bootstrap: [AppComponent]
})

当您这样做时,您将在整个模块和所有子模块中提供相同的实例

但是,有时您可能希望为组件提供单独的服务实例。在这种情况下,您可以通过在组件装饰器的 providers 数组中列出它来在组件级别提供服务,如下所示:

@Component({
templateUrl: './app.component.html',
providers: [MyService]
})

这为这个组件提供了一个新的服务实例。

您想要在模块级别提供服务的一个示例是您将使用服务来保存由多个组件共享的数据。这可能是使用存储在服务中但由多个组件使用的变量或可观察值。如果您的服务是无状态的(仅从 Http 调用返回可观察对象),您可能还想在模块级别提供服务。在这些情况下,共享实例很有意义。

其他时候,您可能希望提供也保存数据的服务,但您希望每个组件都有自己的实例。在这种情况下,在组件级别提供服务是有意义的。

希望对您有所帮助。

关于angular - 何时向 Angular 2 模块级别和 App 组件级别注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com