angular 6 同时订阅来自多个组件的主题不起作用

anugular 6 subscribe to subject from multiple component at a same time not working

我有两个组件(父组件和子组件)和一项服务同时订阅了一个主题 class。但是当主题 class 使用 next 方法发出数据时,只有一个组件(子组件)正在获取数据。

navbar.component.ts :(发件人):

this.messageService.setClientUserAuth(this.respObject.details.actionDtls);

message.service.ts:(订阅者)

constructor(private route: Router, private _rest: RestApiService) {
  this.getClientUserAuth().subscribe(auth => {
    console.log('AUTH :' + JSON.stringify(auth));
  });
}
setClientUserAuth(id: any) {
   this.clientUserAuth.next(id);
}

getClientUserAuth(): Observable<any> {
   this.clientUserAuth = new Subject<any>();
   return this.clientUserAuth.asObservable();
}

base-template.component.ts : (Subscriber) (child)

ngOnInit() {

  this.messageService.getClientUserAuth().subscribe(auth => {
    console.log('------------>' + JSON.stringify(auth));
  });
}

action.component.ts(订阅者)(父)

constructor(private _rest: RestApiService, private messageService: MessageService,
          private route: Router, private modalService: NgbModal, notifier: NotifierService) {
this.messageService.getClientUserAuth().subscribe(auth => {
  console.log('----::----->' + JSON.stringify(auth));
});
}

当数据来自导航栏组件时,只有基本模板 subscription 函数获取数据,但是如果我从基本模板中删除 subscription 方法,那么 subscription 方法来自操作组件得到它。但我希望所有组件和服务中的数据同时呈现,因为它们都在同一时间呈现 time.How 以实现这一点。

修改您的服务方法,从方法中删除主题的初始化 "getClientUserAuth()",在您定义它的地方初始化您的可观察对象(也可能您想将其设为私有):

private _clientUserAuth = new Subject<any>();
getClientUserAuth(): Observable<any> {
   return this._clientUserAuth.asObservable();
}

setClientUserAuth(id: any) {
   this._clientUserAuth.next(id);
}

每次任何组件通过 getClientUserAuth() 的 return 调用订阅时,您最终都会创建一个新主题。