У меня есть сервис и компонент.
some.service.ts
import { Injectable } from '@angular/core';
import { HttpClient} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { SomeClass } from '../model/some.class';
@Injectable()
export class SomeService {
constructor(private http: HttpClient) {}
getData(): Observable<SomeClass[]> {
let url = 'someUrlEndpoint';
let results = this.http.get<SomeClass[]>(url);
return results;
}
}
some.component.ts
import { SomeService } from './service/some.service';
import { SomeClass } from './model/some.class';
export class SomeComponent {
someClass: SomeClass[];
constructor(private someService: SomeService)
ngOnInit() {
this.getData()
}
getData() {
this.someService.getData()
.subscribe(res => this.someClass = res);
}
}
some.class.ts
export class SomeClass {
title: string;
status: string;
numberOfPersons: number;
persons: string;
...
constructor(json: any = "") {
this.title = json.title;
this.status = getStatus(json.status);
this.numberOfPersons = getNumberOfPersons(json.persons);
this.persons = json.persons;
...
}
getStatus(value: number) {
let status = StatusCase.ongoing;
if(value == 1) {status = StatusCase.done}
if(value == 2) {status = StatusCase.completeWithDeviations}
if(value == 3) {status = StatusCase.aborted}
return status;
}
getPersons(value: string) {
let persons = 0;
get persons splitted by comma, count it up and return
return persons;
}
}
export enum StatusCase {
ongoing = "Ongoing";
aborted = "Aborted";
completeWithDeviations = "Complete with deviations";
done = "Done";
}
Я могу получить данные, но не так, как я хочу.
Теперь, поскольку httpClient не возвращает экземпляр SomeClass, он не будет проходить через конструктор, и приложение не получит правильные данные, которые ему нужны.
Итак, где вписывается «новый SomeClass (данные)»? Можно ли вообще сделать так, как устроен httpClient? Или я должен получить нетипизированные данные (json) и выполнить цикл for для заполнения someClass: SomeClass [] традиционным способом?
Или существует другой более разумный способ заполнения вычисляемых свойств?
Использовать перехватчики для манипулирования данными в ответе? Кажется, однако, что перехватчики в ответе только для ошибок.