我正在尝试从$_SESSION
到PHP
获取一些Angular
个变量。我创建了一个名为Injectable
的{{1}}类,并在Globals
的{{1}}中定义了此类。
这是我的 globals.ts :
Providers
上述日志记录命令在整个项目加载完成后有效。但它是我的依赖,我得到了构造函数中的返回值。
示例组件如下:
AppModule
我还为此创建了一个plunker:https://embed.plnkr.co/zRmkQdfqYDBTAoQPqJ5V/
编辑:我知道它是由异步性引起的,我需要的是在初始化之前获得import { Injectable } from '@angular/core';
@Injectable ()
export class Globals {
errorMessage: string;
activeUser: any;
test: string = "test string";
constructor(private userService: UserService) {
this.getActiveUser();
console.log(this.activeUser); //undefined
}
getActiveUser(){
this.userService.getActiveUser()
.then(
user => this.activeUser = user,
error => this.errorMessage = <any>error
);
}
}
的解决方案
感谢任何帮助。
答案 0 :(得分:0)
由于AJT_82通过评论提出,问题由APP_INITIALIZER解决。
首先,我在 app.module.ts 上导入了APP_INITIALIZER
:
import { NgModule, APP_INITIALIZER } from '@angular/core';
在@NgModule()
功能之前,我已经包含了这个:
export function init_app(globals: Globals) {
return () => globals.InitializeApp();
}
同样在providers
部分:
providers:[
Globals,
{ provide: APP_INITIALIZER, useFactory: init_app, deps: [Globals], multi: true },
]
最后,我的 globals.ts :
getActiveUser(resolver){
this.userService.getActiveUser()
.then(
user => {
this.activeUser = user;
resolver();
},
error => this.errorMessage = <any>error
);
}
InitializeApp(): Promise<any> {
return new Promise((resolve, reject) => {
this.getActiveUser(resolve);
});
}