我已经创建了一个服务,从服务器获取一些数据。这些数据对于制作我的组件是必需的,并且应该只被调用一次,因为会对服务器造成巨大负载。当我在app模块提供程序中使用服务时,它会等待获取所需的数据,并成功获取,因为我可以记录下来。但在此后,当我想要在组件中获取数据时,它返回Undefined!
我尝试通过删除providers中的UserService来将服务初始化次数减少到1,但这会导致错误。
获取信息的函数:
getAdminInitInfo(): Promise<any> {
var vm = this;
const promise = this.http.get<AdminInit>(baseUrl + '/panel/admin/initial/')
.toPromise()
.then(
response => {
vm.adminInitInfo = response;
console.log(response);
}
)
return promise;
}
在APP_INITIALIZATION中使用的工厂:
export function adminProviderFactory(provider: UserService) {
return () => provider.getAdminInitInfo();
}
AppModule 的提供者:
providers: [
AuthGuardService,
AuthService,
{
provide: HTTP_INTERCEPTORS,
useClass: InterceptorService,
multi: true
},
UserService,
{
provide: APP_INITIALIZER,
useFactory: adminProviderFactory,
deps: [UserService],
multi: true
}
]
我在组件中获取的数据日志:
user.service.ts:23 service started
user.service.ts:23 service started
user.service.ts:70 {filters: {…}}
user.service.ts:78 undefined
overview.component.ts:19 undefined
在这个过程之后,adminInitInfo应该通过此函数在任何需要的时候返回:
getSomethingData() {
var data = {};
console.log(this.adminInitInfo);
if (!this.adminInitInfo) {
return undefined;
}
data['something'] = this.adminInitInfo.filters.something;
data['something2'] = this.adminInitInfo.filters.something2;
data['something3'] = this.adminInitInfo.filters.something3;
return data;
}
在这样的组件中:
例如:
ngOnInit() {
this.params = this.userService.getSomethingData();
}