在最新版本的Range6中,使用服务元数据中的providedIn属性在模块中注册服务:
@Injectable({
providedIn: 'root',
})
export class HeroService {}然而,文档仍然提到在模块元数据中的模块providers数组中注册服务,就像我们在角5中所做的那样:
@NgModule({
providers: [HeroService],
})
export class AppModule {}所以,
providers数组方法会被废弃吗?发布于 2018-05-07 07:12:11
基本上您可以使用这两种方法,但是按照新的CLI,provideIn将在创建service时自动添加。
#供应
现在有一种新的、推荐的注册提供程序的方法,直接在
@Injectable()装饰器中,使用新的providedIn属性。它接受'root'作为应用程序的值或任何模块。当您使用'root'时,您的可注入性将在应用程序中注册为单例,并且不需要将其添加到根模块的提供程序中。类似地,如果使用providedIn: UsersModule,则可以将可注入性注册为UsersModule的提供程序,而无需将其添加到模块的提供程序中。 这种新的方法在应用中得到了更好的树振。目前,添加到模块提供程序中的服务将在最后一个包中结束,即使它没有在应用程序中使用,这有点令人难过。
欲了解更多信息,请参阅此处
发布于 2018-05-07 07:09:02
与以往一样,当有多个解决方案可用时,这取决于您想要实现的目标。但是文献资料给出了一些选择的指令。
有时,在应用程序根注入器中总是提供服务是不可取的。也许用户应该显式地选择使用服务,或者服务应该在负载缓慢的上下文中提供。在这种情况下,提供程序应该与特定的
@NgModule class相关联,并且将由包含该模块的任何注入器使用。
因此,基本上,您将对应用程序范围内的任何服务使用providedIn: 'root'。对于其他服务,继续使用旧版本。
别忘了你已经可以选择以不同的方式提供服务了。例如,也可以在组件级别声明可注入性(在V6中不会改变)。
@Component({
selector: 'app-my-component',
templateUrl: './my.component.html',
providers: [ MyService ]
})这样,服务就只能在MyComponent及其子组件树中使用。
发布于 2018-11-01 10:20:43
如果您使用的是角5+开发人员,它将在声明为providedIn:'root‘时自动创建可注入的服务,在这种情况下,您将不需要导入app.module.ts中的服务。您可以直接在另一个组件中使用它。
https://stackoverflow.com/questions/50208642
复制相似问题