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 { }
似乎有效。它现在按预期发射。
我似乎无法在我的 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 { }
似乎有效。它现在按预期发射。