Angular 上的跨服务通信

Cross-service communication on Angular

我有两个相互依赖的服务,比方说 serviceAserviceBserviceA 从组件调用执行操作方法,并且必须在流程结束时发出一个值。这个发射是从 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