В моем угловом интерфейсе 2 службы, одна для вызовов API и одна для обмена данными двумя разными компонентами.Таким образом, вторая служба использует службу API.
Если я использую только службу API и подписываю свои Observables внутри моего компонента, все работает нормально (см. Xxx.component.html).
Поэтому, если я объявлю эти две службы в качестве провайдеров внутри app.module и добавлю API-службу в службу общего доступа, она больше не будет работать.
Используя отладчик, я всегда получаю переменную "tmp", не определенную вsettings.service.ts
Я знаю, я мог бы сделать это также с помощью @Input для дочерних компонентов, но я думаю, что использование службы гораздо удобнее и для развязки компонентов.
Любые предложения:)?
Ниже моего кода:
api.service.ts
export class ApiService {
API_URL = 'https://localhost:44381/api/v1';
constructor(private httpClient: HttpClient) { }
/** GET settings from API*/
getSettings(): Observable<Setting[]> {
return this.httpClient.get<Setting[]>(this.API_URL + '/settings')
.pipe(
catchError(this.handleError('getSettings', [])));
}
}
settings.service.ts
export class SettingsService {
tmp: Setting[];
constructor(private apiService: ApiService) { }
getSettings(): void {
this.apiService.getSettings()
.subscribe(settings =>
this.tmp = settings);
}
getData(): Setting[] {
this.getSettings();
return this.tmp;
}
}
settings.component.ts
export class SettingsComponent implements OnInit {
settings: Setting[];
constructor(private settingService: SettingsService) { }
// Load Setting while starting
ngOnInit() {
// this.getSettings();
this.settings = this.settingService.getData();
}
// old code when using only API service which works..
/*getSettings(): void {
this.apiService.getSettings()
.subscribe(settings => this.settings = settings);
}*/
}
settings.component.hmtl
<div>
<table>
<tr>
<th>keyname</th>
<th>value</th>
<th>defaultValue</th>
<th align="right">text</th>
</tr>
<tr *ngFor="let s of settings">
<td>{{s.keyName}}</td>
<td>{{s.wert}}</td>
<td>{{s.defaultValue}}</td>
<td align="right">{{s.description}}</td>
</tr>
</table>
</div>