Observable 未在 angular ngOnInit 中触发

Observable not firing in angular ngOnInit

我似乎无法在我的 angular 应用程序中启动可观察的主题。我有如下的 lodaer 服务。

import { Injectable } from '@angular/core';
import axios, { AxiosPromise } from 'axios';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class LoaderService {
    LoaderEvent: BehaviorSubject<boolean>;
    loaderState: string;
    constructor() {
        this.LoaderEvent = new BehaviorSubject(false);
    }

    get GetLoaderEvent(): Observable<boolean> {
        return this.LoaderEvent.asObservable();
    }

    addLoader(loader: boolean): void {
        this.LoaderEvent.next(loader);
    }

}

在我的加载器组件中

ngOnInit() {
        this.loaderService.GetLoaderEvent.subscribe(
            (x) => {
                console.log('Next: ' + x.toString());
                this.loaders.push(this.loaders.length + 1);
            },
            (err) => {
                console.log('Error: ' + err);
            },
            () => {
                console.log('Completed', this.loaders);
            }
        );
}

在所有其他单独的组件中

 ngOnInit() {

        this.loaderService.addLoader(true);
        this.myService
            .list
            .then(e => {
                this.myData= e.data;
                this.loaderService.addLoader(false);
            })
            .catch(err => {
                this.loaderService.addLoader(false);
            });
}

我想在所有其他 components/pages 调用开始和结束时触发 observable。我的 this.loaderService.addLoader(false);应该触发我在加载程序组件中订阅的可观察对象。然而事实并非如此。如果我在订阅下方的加载程序组件中添加我的 this.loaderService.addLoader(false);,那么它就可以工作。请问我做错了什么?任何帮助将不胜感激。

找到问题原因。我的加载器组件和服务位于 sharedModule 中。然后我在 shareModule providers 中添加了我的 loaderService 。事实证明,如果我想在所有其他组件中使用它,我必须将它移至 appModule。好感动

    import { LoaderService } from './services';
    @NgModule({
    ...
    providers: [LoaderService]
    })
export class SharedModule { }

来自 shared.module

import { LoaderService } from './shared/services';


    @NgModule({
    ...
    providers: [LoaderService]
    })
export class AppModule { }

似乎有效。它现在按预期发射。