Anugular 6 подписаться на тему из нескольких компонентов одновременно не работает - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть два компонента (родительский и дочерний) и один сервис, которые подписаны на предметный класс одновременно. Но когда подчиненный класс отправляет данные, используя метод 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: (подписчик) (дочерний элемент)

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));
});
}

Когда данные поступают из компонента navbar, данные получает только функция базового шаблона subscription, но если я удаляю метод subscription из базового шаблона, то метод subscription из компонента действия получает его. Но мне нужны данные во всех компонентах и ​​сервисах одновременно, поскольку все они предоставляются одновременно. Как этого добиться.

1 Ответ

3 голосов
/ 25 апреля 2019

Измените свой метод обслуживания, удалите инициализацию субъекта из метода "getClientUserAuth ()", инициализируйте свою наблюдаемую область там, где вы ее определяете (также, возможно, вы хотите сделать ее частной):

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

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

Каждый раз, когда какой-либо компонент вызывает подписку с возвратом getClientUserAuth(), вы заканчивали тем, что создавали новую тему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...