使用Ajax调用进行Angular 4依赖注入

时间:2017-12-28 12:20:55

标签: angular dependency-injection

我正在尝试从$_SESSIONPHP获取一些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 ); } } 的解决方案

感谢任何帮助。

1 个答案:

答案 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);
    });
}