Tengo un problema «medio solucionado». Y es que cuando con HTTP te llega un response y haces el típico
let data = response.json() as User[];
Data es un array de objetos JSON, no de objetos User. Si tienes bien sincronizado la respuesta con la interfaz User deberían ser iguales, pero si tienes metodos estos no están.
Que medio me hace la transformación. El problema que solo me «serializa» el objeto «padre», los sub objetos no. Se supone que usando @Type() pero en cuanto los pongo Angular explota…
¿Conocéis alguna fórmula más bonita, elegante o al menos eficaz?
No sé si solucionará tu problema de nested objects (has pensado en “componentizar” esos subobjetos?), pero habitualmente el fetch de datos se hace con observables y .map() de RxJS
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import { Hero } from './hero';
@Injectable()
export class HeroService {
private heroesUrl = 'api/heroes'; // URL to web API
constructor (private http: Http) {}
getHeroes(): Observable<Hero[]> {
return this.http.get(this.heroesUrl)
.map(this.extractData)
.catch(this.handleError);
}
...
Quizás deberías crearte un constructor que parsee el objeto JSON que le pases y lo asigne a los miembros de la clase. Te va a dar más seguridad en cuanto a la conversión y mayor control.