在 Angular2+ 中,什么时候设置静态变量?
In Angular2+, when are static variables set?
假设我在 Angular 5 中有一项看起来像
的服务
@Injectable()
export class CognitoUtil {
constructor(
private anotherService: AnotherService
) {}
public static GREETING = "Howdie Partner";
}
变量GREETING
的生命周期是多少?
什么时候设置?它是在应用程序被加载之前就被设置的吗(在我看来是这样)?无论如何在它运行之前发生一些事情 - 例如,将可能影响最终给定值的其他值设置为 GREETING
?
我非常希望能对此做出一些澄清。
谢谢!
首先,我认为你对 "When is it set" 的看法是正确的。
其次,在我看来,你不应该在服务中使用静态变量,因为你违反了依赖注入模式。
如果一定要用,我觉得你可以试试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 5 中有一项看起来像
的服务@Injectable()
export class CognitoUtil {
constructor(
private anotherService: AnotherService
) {}
public static GREETING = "Howdie Partner";
}
变量GREETING
的生命周期是多少?
什么时候设置?它是在应用程序被加载之前就被设置的吗(在我看来是这样)?无论如何在它运行之前发生一些事情 - 例如,将可能影响最终给定值的其他值设置为 GREETING
?
我非常希望能对此做出一些澄清。
谢谢!
首先,我认为你对 "When is it set" 的看法是正确的。
其次,在我看来,你不应该在服务中使用静态变量,因为你违反了依赖注入模式。
如果一定要用,我觉得你可以试试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 { }