angular - Cum transformi datele structurate într-un observable?
Am o API web care returnează niște date structurate.
{
i: {
f: [...],
a: val,
b: val
},
a: [...],
b: [...],
c: [...]
}
Întorc acest lucru la o aplicație Angular 6 - presupun că folosind Observables și rxjs. Toate exemplele pe care le văd cu observables presupun un array care este transformat în observable. Totuși, aceste date sunt structurate și conțin câteva sub-arrays în cadrul structurii.
Sunt nou în Angular, așa că caut niște îndrumare, dacă este posibil.
Răspuns #1
serviciu :
import {
HttpClient,
HttpErrorResponse,
HttpEvent,
HttpHandler,
HttpInterceptor,
HttpRequest,
HttpHeaders
} from '@angular/common/http';
constructor(private httpClient: HttpClient,
) {
}
/**
* This method is use for send GET http Request to API.
* @param url - Additional request URL.
* @param options - Header(s) which will pass with particular request.
*/
get(url: string, options?: any): Observable<any> {
return this.httpClient.get(url, this.requestOptions(options))
}
/**
* Request options.
* @param headerOptions
* @returns {RequestOptionsArgs}
*/
private requestOptions(headerOptions?: any): any {
options = {
headers: new HttpHeaders({
"Authorization": "Bearer " + token,
"Content-Type": "application/json"
})
}
}
component.ts:
myData: Array<any>;
/**
* This method is used to get data
*/
getFormData(filter) {
this.requestURL = `your_url`;
this.http.get(this.requestURL, options).subscribe(response => {
this.myData = response as ArrayCast[]
console.log(response)
})
;
}
export class ArrayCast{
a: any;
b: any;
c: any;
}
Răspunsul #2
În primul rând, cum aduci datele în aplicația ta Angular? Printr-un apel http? Apoi vei obține automat (cu Angular5+ => HttpClient) un observable care conține întreaga structură (cu toate imbricările, cu toate array-urile din interior).
this.http.get(url).subscribe( result => console.log(result));
Dacă accesarea acestui "url" va returna JSON-ul tău complex, atunci vei obține un observable care va emite exact O VALOARE. Și această valoare va fi întregul tău JSON complex.
Un Observable poate înfășura orice. Tipuri primitive (număr, șir de caractere, boolean) sau obiecte complexe. Pentru observable nu există nicio diferență.
De asemenea, poți crea un observable direct în codul tău (de exemplu, în scopuri de testare)
import {of} from 'rxjs/internal/observable/of';
of(myData);
Există multiple moduri de a crea observabile (aruncă o privire la aceste exemple aici)
cu stimă
