尽管有根注入和单个提供程序声明,但Angular Singleton Service仍创建多个新实例

时间:2020-10-04 22:39:51

标签: angular service singleton angular-services

我正在尝试创建一个服务,该服务包含Angular Web应用程序跨组件(可以读取和写入这些变量的组件)共享的变量。因此,我需要将其作为单例服务,但是由于每个新组件都创建了一个新实例,所以我没有运气。

服务(GlobalService)声明如下:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})

export class GlobalService {

  currentUser: string = null;
  currentProject: string = null;
  currentProjectName: string = null;
  canEditInProject: boolean = null;

  constructor() {
    console.log('in global service constructor');
  }

之后具有getter和setter方法。

在app.module.ts中,我有以下内容:

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    FontAwesomeModule,
    FlexLayoutModule,
    RouterModule.forRoot([]),
    LayoutModule,
    MDBBootstrapModule.forRoot(),
    BrowserAnimationsModule,
    HttpClientModule,
  ],
  providers: [GlobalService],
  bootstrap: [AppComponent]
})

在提供程序中声明的位置。我已经搜索了我的项目,该服务没有其他提供者声明。

使用它的每个组件(1)在顶部都有一个import语句,然后(2)在其构造函数中声明一个私有变量,例如:

constructor(private globalService: GlobalService)

,并使用this.globalService变量获取或设置服务变量。

尽管如此,每次加载新页面时,我从global.service.ts中的打印语句中看到调用了构造函数,并创建了一个新实例。然后,当然,我所有的变量都为null,没有任何持久性。

有什么想法吗?或任何其他解决方案的想法?我以前尝试过使用localStorage和sessionStorage,但那里也有些不稳定...。我很困惑

0 个答案:

没有答案