Angular2 Spinner httpInterceptor,在预引导中加载配置(应用初始化器)

Angular2 Spinner httpInterceptor,在预引导中加载配置(应用初始化器),angular,angular2-services,angular2-observables,Angular,Angular2 Services,Angular2 Observables,我正在尝试将1.3中的现有代码迁移到2。我有一个在应用程序启动之前加载的配置服务。我还需要展示一个使用httpInterceptor的微调器。我正在订阅SpinnerService可在应用程序组件中观察到。但由于http调用是在引导之前进行的,所以observable始终是未定义的 @NgModule({ imports: [BrowserModule, FormsModule, HttpModule, RouterModule,SharedModule, AppRoutingModule

我正在尝试将1.3中的现有代码迁移到2。我有一个在应用程序启动之前加载的配置服务。我还需要展示一个使用httpInterceptor的微调器。我正在订阅SpinnerService可在应用程序组件中观察到。但由于http调用是在引导之前进行的,所以observable始终是未定义的

  @NgModule({
imports: [BrowserModule, FormsModule, HttpModule, RouterModule,SharedModule, AppRoutingModule
providers: [

    {
        provide: Http,
        useFactory: (backend:XHRBackend, options:CustomOptions) => {
            return new HttpService(backend, options, new SpinnerService());
        },
        deps: [XHRBackend, RequestOptions]
    },
    SpinnerService ,
    ConfigService,
    {
        provide: APP_INITIALIZER,
        useFactory: (config: ConfigService) => () => config.loadConfig(),
        deps: [ConfigService],
        multi: true
    },
    {
        provide: RequestOptions,
        useClass: CustomOptions

    },
],
declarations: [AppComponent ],

bootstrap: [AppComponent]
})

app.component.ts中的方法

private createServiceSubscription() {
    this.subscription = this.spinnerService.spinnerObservable.subscribe(show => {
        if (show) {
            this.startSpinner();
        } else {
            this.stopSpinner();
        }
    });
}
微调器服务: 出口级喷丝板服务{

public spinnerObserver: Observer<boolean>;
public spinnerObservable: Observable<boolean>;

constructor() {

    this.spinnerObservable = new Observable<boolean>((observer: Observer<boolean>)  => {
            this.spinnerObserver = observer;
        }
    ).share();
}

showSpinner() {
    if (this.spinnerObserver) {
        this.spinnerObserver.next(true);
    }
}

hideSpinner() {
    if (this.spinnerObserver) {
        this.spinnerObserver.next(false);
    }
}
公共喷丝头观察者:观察者;
公共喷丝头可观察:可观察;
构造函数(){
this.spinnerObservable=新的可观察对象((观察者:观察者)=>{
this.spinnerObserver=观察者;
}
).share();
}
showSpinner(){
if(本喷丝头观察者){
this.spinnerObserver.next(true);
}
}
hideSpinner(){
if(本喷丝头观察者){
this.spinnerObserver.next(false);
}
}
有没有一种方法可以直接从预引导中使用customHttpService显示微调器


}使用行为主体。BehaviorSubject发出一个初始值,订阅者将立即获得该值

//private
this.spinnerObserver = new BehaviorSubject<boolean>(false);

//public
this.spinnerObservable = this.spinnerObserver.asObservable().share();
//私有
this.spinnerObserver=新行为主体(false);
//公开的
this.spinnerObservable=this.spinnerObservable.asobbservable().share();

我如上所述更改为行为主体。Observer已定义,但spinnerObserver.next(true)未到达订阅服务器。但是,它到达订阅者以获取假值。不知道怎么了。我还在调试,看起来它总是取初始值。不是最新的值