angular - 在 Angular2+ 中,什么时候设置静态变量?

标签 angular typescript lifecycle angular-services static-variables

假设我在 Angular 5 中有一个看起来像这样的服务

@Injectable()
export class CognitoUtil {

    constructor(
        private anotherService: AnotherService
    ) {}

    public static GREETING = "Howdie Partner";

}

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

什么时候设置?它是在应用程序被加载之前就被设置的吗(在我看来是这样)?在它运行之前是否有任何事情发生 - 例如,将可能影响最终给定值的其他值设置为 GREETING

我真的很感激对此的一些澄清。

谢谢!

最佳答案

首先,我认为您关于“何时设置”的说法是正确的。

其次,在我看来,您不应该在服务中使用静态变量,因为您违反了依赖注入(inject)模式。

如果一定要用,我想你可以尝试使用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 { }

关于angular - 在 Angular2+ 中,什么时候设置静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49144338/

相关文章:

Angular 2 - 指令声明但仍然有错误

typescript 错误 "class is not a constructor"

Android Activity 生命周期 : state order when new activity starts

Android Activity 生命周期 - 所有这些方法的用途是什么?

angular - 在哪里声明 Angular catch all (Not found) 路由

javascript - 如何过滤响应数据并使用 Angular 2/4 显示不同的值

angular - 在带 Angular 选择中加载默认选项

javascript - 如何在 Vue 3 中导入 svg?

typescript - 使用 mongoose 在 mongodb 数组中进行部分字符串匹配

java - 如何拦截线程生命周期?