我知道Angular 6中必须创建单例服务的方式已经发生了一些变化。我有一个身份验证服务,需要为访问它的每个组件构造一次。我将提供程序设置为服务的根目录:
@Injectable({
providedIn: 'root'
})
在我的app.module.ts文件中,我将AuthService设置为NgModule中的提供程序之一。但是,每当我在使用Auth服务的不同组件之间路由时,它都会创建Auth Service的新实例(从第一次调用时清除数据)。如何确保Auth服务仅实例化一次,然后在不同组件之间访问该实例?
答案 0 :(得分:6)
这是将providerIn添加到服务级别的默认行为。按照Docs
providedIn在这里告诉Angular根注入器负责 用于创建HeroService的实例。服务是 只要以这种方式自动为整个 应用程序,无需在任何模块中列出。
就您而言,只需删除 providedIn: 'root'
,然后在module.ts中仅提供以下内容。请参阅以下 answer 。
答案 1 :(得分:2)
为避免任何其他混乱,您可以通过两种方式创建单例,如文档(singleton-services)所述:
app:src
。@Injectable({providedIn: 'root'})
。在我的情况下,使用JIT时,单例服务无法正常工作(常规ng build / ng serve)。对我来说,它仅在使用AoT时才有效(ng build --aot / ng serve --aot)。