【问题标题】:Angular 2 http service is singleton or not?Angular 2 http 服务是否是单例的?
【发布时间】:2016-11-25 19:26:20
【问题描述】:

我在共享模块中使用从@angular/http 导入的http 服务,我使用类继承来扩展http 服务。所以我的共享模块有一个名为“AuthHttp”的服务,它扩展了 http 服务。在我的主应用程序模块中,我定义人员提供者,提供:http useClass:AuthHttp。在我的应用程序内部的不同组件中,我注入了 http 服务,是否有可能或设计使该服务不是单例的?

【问题讨论】:

标签: angular


【解决方案1】:

如果您在AppModule@NgModule({providers: [...]})AppModule 直接或间接导入的模块中提供服务,那么您将获得单例。

如果您在 @Component(...) 中提供服务,那么您将获得每个组件实例的服务实例。

【讨论】:

  • 我就是这么想的。然而,我遇到了一个奇怪的情况:我在我的AppModule 中导入了我的AuthenticationModule。在这个AuthenticationModule 中,我提供了我的AuthenticationService(我需要它作为一个单例,因为我在那里使用成员变量)。然而,我得到了一个maximum call stack exceeded,这是一个服务不是单例的标志。但是:当我在AppModule 而不是AuthenticationModule 中提供服务时,一切都按预期工作。你能在这里清理一下吗?
  • 很难从这些信息中分辨出来。如果提供程序仅在 non-lazy-loaded 模块的 @NgModule() 中提供,则 DI 创建的实例永远不会超过一个。
  • 嗯,好像是这样。在这种情况下,您还有什么其他的想法会导致maximum callstack exceeded 吗?
  • 您已经找到了创建无限循环的最有效方法;-) public set bypassConfirmations(val: boolean) { this.bypassConfirmations = val; } 您需要一个类似this._bypassConfirmations = val; 的支持字段(添加下划线或类似内容)。 stackblitz.com/edit/angular-gozwcd
  • Maaaaan 非常感谢,您说的太对了 :D 非常感谢您的帮助! :)
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 2020-12-20
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多