Angular 上的跨服务通信
Cross-service communication on Angular
我有两个相互依赖的服务,比方说 serviceA
和 serviceB
。 serviceA
从组件调用执行操作方法,并且必须在流程结束时发出一个值。这个发射是从 serviceB
监听的,然后它必须更新它的方法。我做了 但 subject
似乎在服务之间不起作用。
@Injectable()
export class ServiceA {
// Observable source
private textSource = new Subject<string>();
// Observable stream
text$ = this.textSource.asObservable();
methodCalledFromComp() {
// does some work
this.textSource.next('someValue');
}
@Injectable()
export class ServiceB {
constructor(private serviceA: ServiceA) {
serviceA.text$.subscribe(el => {
// not comes here, only when I call the same from a method
console.log(el);
});
}
我对从这个发射中监听的组件进行了测试,它起作用了。难道我做错了什么?还有其他选择吗?
尝试将这些服务设置为单例
@Injectable({ providedIn: 'root' })
我刚刚在这里创建了一个演示:stackblitz
您可能遇到的情况是应用程序中从未初始化过服务 B,我遇到过这种情况。
我在这里创建了一个演示:stackblitz
我有两个相互依赖的服务,比方说 serviceA
和 serviceB
。 serviceA
从组件调用执行操作方法,并且必须在流程结束时发出一个值。这个发射是从 serviceB
监听的,然后它必须更新它的方法。我做了 subject
似乎在服务之间不起作用。
@Injectable()
export class ServiceA {
// Observable source
private textSource = new Subject<string>();
// Observable stream
text$ = this.textSource.asObservable();
methodCalledFromComp() {
// does some work
this.textSource.next('someValue');
}
@Injectable()
export class ServiceB {
constructor(private serviceA: ServiceA) {
serviceA.text$.subscribe(el => {
// not comes here, only when I call the same from a method
console.log(el);
});
}
我对从这个发射中监听的组件进行了测试,它起作用了。难道我做错了什么?还有其他选择吗?
尝试将这些服务设置为单例
@Injectable({ providedIn: 'root' })
我刚刚在这里创建了一个演示:stackblitz
您可能遇到的情况是应用程序中从未初始化过服务 B,我遇到过这种情况。
我在这里创建了一个演示:stackblitz