2017-03-09 38 views
2

我一直在观察Angular 2 PluralSight入门,并且我看到一些创建的服务注入App组件和模块组件。何时将服务注入到Angular 2模块级别和应用程序组件级别

这里的例子:

当角2创建RouterGuard,为RouterGuard创建的服务被注入在模块级,但一些自定义的服务被注入只是应用组件级。我的问题是,什么时候应该向模块级别注入服务,何时只注入应用程序组件级别。

谢谢!

回答

8

事实上,您可以在模块级别和组件级别提供服务。您可以提供在模块级服务,由providers阵列NgModule像这样的清单吧:

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

当你这样做,你在整个模块和所有儿童提供相同的实例

但是,有时,您可能希望向组件提供个别实例。在这种情况下,你可以通过providers阵列中的组件装饰这样的清单它提供在组件级别的服务:

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

这只是这个组件提供服务的新实例。

当您想要在模块级别提供服务时的一个示例是何时使用服务来保存由多个组件共享的数据。这可以使用存储在服务中但由多个组件使用的变量或观察值。如果你的服务是无状态的(只返回来自Http调用的可观察对象),你希望在Module级别提供服务的另一次。在这些情况下,拥有共享实例是有道理的。

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

希望有所帮助。

+1

我会说在模块或应用程序级别“提供”。注入是注入器在创建实例并将值传递给构造函数时执行的操作。 –

+1

够正确。我可能已经过度简化了这个概念。 –

+0

在模块级别插入时,它将被共享,但在组件级别插入时,将不会共享。要有单件服务注入,请在模块级别使用它 –