Angular 6创建单例服务

Angular 6创建单例服务,angular,authentication,angularfire2,angular6,Angular,Authentication,Angularfire2,Angular6,我知道Angular 6在创建单例服务的方式上有一些变化。我有一个Auth服务,需要为访问它的每个组件构造一次。我将服务的提供程序设置为root用户: @可注入({ providedIn:'根' })这是将providedIn添加到服务级别的默认行为。依照 此处提供的信息告诉Angular,根部注入器负责 用于创建服务的实例。提供的服务 如果采用这种方式,将自动向整个系统提供 应用程序,不需要在任何模块中列出 在您的情况下,只需删除“root”中提供的,并在module.ts中仅提供了不足的内

我知道Angular 6在创建单例服务的方式上有一些变化。我有一个Auth服务,需要为访问它的每个组件构造一次。我将服务的提供程序设置为root用户:

@可注入({
providedIn:'根'

})
这是将providedIn添加到服务级别的默认行为。依照

此处提供的信息告诉Angular,根部注入器负责 用于创建服务的实例。提供的服务 如果采用这种方式,将自动向整个系统提供 应用程序,不需要在任何模块中列出


在您的情况下,只需删除“root”中提供的
,并在module.ts中仅提供了不足的内容。请参阅以下

以避免任何其他混淆,您可以通过两种方式创建单例,正如文档()中所述:

  • 声明应在应用程序根目录中提供服务。
    @Injectable({providedIn:'root'})

    该服务不应导入任何模块。
  • 将服务包括在AppModule或仅由AppModule导入的模块中。
    此处无需使用
    {providedIn:'root'}

在我的例子中,单例服务在使用JIT(正常的ng构建/ng服务)时不起作用。对我来说,它只在使用AoT(ng build--AoT/ng serve--AoT)时起作用。

我明白了。我不知道如何实例化Auth服务的全局实例。我得到以下错误:未捕获错误:无法解析AuthService:(?)的所有参数。导入转到此处@Injectable()导出类AuthService{user:any;构造函数(私有fireBaseAuth:AngularFireAuth){this.fireBaseAuth.authState.subscribe(用户=>{if(用户){console.log(用户)this.user=user}else{this.user=undefined}}};}userDetails(){if(this.user){return this.user;}else{return undefined}}isLoggedIn(){console.log(this.user)if(this.user){return true}else{return false}}在问题中发布您的代码和app.module.ts否当您刷新页面时,它将再次被实例化,是的,您应该在Angular 8中解决相同的问题。如果没有aot标志,它将无法工作。我为这个简单的标志浪费了2-3天。为什么没有aot它无法工作?