Ваш подход к этим объектам BehaviorSubjects не является наилучшей практикой.
Прежде всего, удалите все эти типы. Создайте интерфейс.
export interface Setting {
// whatever comes here
}
export interface Information {
// whatever comes here
}
Вам не нужен сервис для каждой конечной точки API, давайте создадим только 1 здесь. Вы включаете обе конечные точки в эту услугу. Они возвращают Observable.
@Injectable()
export class MyService {
constructor(private http: HttpClient) {}
public loadSettings(): Observable<Setting[]> {
return this.http.get<Setting[]>('/api/settings');
}
private loadInformations(appId: string): Observable<Information[]> {
return this.http.get<Information[]>('/api/informations/appId');
}
}
Затем в вашем Компоненте вы можете сделать что-то вроде этого:
@Component({
selector: 'calc',
templateUrl: 'calc.component.html',
styleUrls: ['calc.component.css']
})
export class CalcComponent {
settings$: Observable<Setting[]>;
informations$: Observable<Information[]>;
constructor(private myService: MyService){
this.settings$ = myService.loadSettings();
this.informations$ = this.settings$.pipe(
switchMap(settings => myService.loadInformations(myAppId)), // whereever myAppId comes from
);
}
}
Подписаться на него в вашем шаблоне с помощью асинхронного канала.