Проблема в том, что вы создаете новый наблюдаемый экземпляр в обработчике onClick (comp B), который не имеет ничего общего с тем, который создан в ngOnInit (Comp A).
Сделайте это вместо этого в вашем сервисе:
public data$: Observable<IData>;
constructor() {
this.data$ = this.http.get<IData>(apiUrl).pipe(
shareReplay(1)
);
}
В компоненте B:
public onClick(): void {
this.myService.data$.subscribe(
// Any code to execute when data is received
);
}
Затем, где бы вы ни хотели получить доступ к извлеченным данным, используйте myService.data $.Оператор shareReplay гарантирует, что операция http fetch будет выполняться только один раз, независимо от того, на сколько раз подписаны данные $.