在Angular2 +中,何时设置静态变量?

时间:2018-03-07 04:48:39

标签: angular typescript lifecycle angular-services static-variables

假设我在Angular 5中有一个看起来像

的服务
@Injectable()
export class CognitoUtil {

    constructor(
        private anotherService: AnotherService
    ) {}

    public static GREETING = "Howdie Partner";

}

变量GREETING的生命周期是多少?

什么时候设定?应用程序加载之前是否设置它甚至是自助引导(对我来说似乎如此)?无论如何都要在它运行之前发生一些事情 - 例如,将可能影响最终给定值的其他值设置为GREETING

我真的很感激对此有所澄清。

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我认为你对“何时设定”是正确的。

其次,从我的角度来看,你不应该在服务中使用静态变量,因为你违反了依赖注入模式。

如果你必须使用它,我想你可以尝试使用Angular提供的APP_INITIALIZER。

例如:

import { HttpClientModule } from "@angular/common/http";

import { CognitoService } from './cognito.service';
import { AnotherService } from './another.service';

export function init_app(anotherService : AnotherService ) {
    return () => {
        CognitoService.GREETING = anotherService.someValue;
    };
}

@NgModule({
  imports: [HttpClientModule],
  providers: [
    AnotherService,
    CognitoService,
    { provide: APP_INITIALIZER, useFactory: init_app, deps: [AnotherService], multi: true }
  ]
})
export class AppLoadModule { }