Рассматривая следующую реализацию сервиса
export class ReportService{
postedReport: BehaviorSubject<any> = new BehaviorSubject<any>(null);
...
createNewReport(...){
return this.http.post(...).pipe(tap((response)=>{
this.postedReports.next(response);
}));
}
}
Используя rxjs pipe и tap , мы подключаемся к асинхронному ответу и сохраняем его в BehaviorSubject.
Затем воспроизводим этот фрагмент из вашего исходного кода,
export class componentA{
constructor(public reportService: ReportService,...){}
...
submitForm(){
this.reportService.createNewReport(...)
.toPromise().then(() => console.log('post'));
}
}
Здесь, наконец, мы можем прочитать значение ответа нашего сервиса в компоненте B
export class componentB{
constructor(public reportService: ReportService,...){
let sub = this.reportService.postedReport.subscribe((report)=>{
console.table(report);
})
}
...
printReport(){
console.log(this.reportService.postedReport.value)
}
}
Пожалуйстаобратите внимание, что эти примеры являются неполными, и мы используем заполнители, такие как [...]
. В ответ на OP требуется привязка к ответу на вызов компонента componentA в componentB. Не используя функцию навигации, как было предложено, поскольку мы находимся в одном угловом приложении, сервис также работает и имеет преимущество в отделении навигации от запроса и хранения данных.