我正在尝试创建一个服务,该服务包含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,但那里也有些不稳定...。我很困惑