что я понял из вашего вопроса, так это то, что у вас есть два компонента и сервис, вы получаете данные с помощью сервиса и хотите отправить данные обоим компонентам одновременно, когда бы ни вызывалась следующая функция 'getDetails ()' независимо от того, где эта функция вызывается. это может быть родительский вызов функции или потомка.
public getDetails(id) {
return this.http.get(this.url.concat(id))
.pipe(map(data => this.extractDetails(data),
catchError(err => this.handleError(err))); }
В вашем коде проблема в коде компонентов, который вы вызываете функцией getDetails, и внутри этой функции вы подписываете наблюдаемое, вместо этого вы должны быть подписка наблюдаемого в ngOnInit. так что когда бы этот observable.next вызывался из службы, наблюдаемая будет выполняться в обоих компонентах, потому что она будет подписана там, см. код ниже.
ngOnInit(){
this.getDetails();
this.hitUrl(); }
getDetails(){
this.service.observable.subscribe(
(data: any) => {
console.log(data);
},
err => {
console.error(err);
}
)
}
hitUrl(id: string) {
this.service.getDetails(id).subscribe(
(data: any) =>
if(!!data){
console.log(data);
}
},
err => {
console.log(err);
}
);
}
В приведенном выше коде мы сначала подписываемся на тему и тогда мы вызываем данные. внутри функции getDetails (id) в сервисе мы уже излучаем тему и также заменяем следующую строку в сервисе.
subject = new Subject<any>();
observable = this.subject.asObservable();
следующей
subject = new BehaviorSubject({});
надеюсь, это поможет .. .