Angular2. Carte de la réponse http à béton instance de l'objet
Approche commune des processus de réponse http est comme ça:
return this._http.get(url)
.map((res: Response) => res.json());
qui vous offre une Observable<Object[]>
où Object
est créé dynamiquement le type de json dé-sérialisation.
Ensuite, vous pouvez utiliser ce résultat dans *ngFor="let item of result | async"
etc...
J'aimerais obtenir une instance de type (ce qui signifie en utilisant new
opérateur pour appeler le type du constructeur).
Essayé différentes façons de parvenir à quelque chose comme ça:
.map((res: Response) => { let obj = res.json(); return new MyObject(obj.id, obj.name);})
mais obtenir cette erreur: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
De cette façon semble fonctionner mais c'est bien trop compliqué et probablement pas efficace:
.map((res: Response) => {
let results = <MyObject[]>[];
let obj = res.json();
obj.forEach(
function (o: any) {
results.push(new MyObject(o.id, o.name));
}
);
return results;
}
Merci!
Observable<Array<Object>>
?stackoverflow.com/questions/22885995/...
*ngFor
prend uniquement en charge les tableaux, les objetsVoir aussi stackoverflow.com/questions/35534959/...
J'ai besoin de trouver un temps à aller au moyen de ces postes. Je l'espère, il y a quelque chose de construit dans Observables trop y parvenir. J'ai mis à jour ma question, avec la manière qui semble fonctionner, mais je ne l'aime pas.
OriginalL'auteur rook | 2016-09-10
Vous devez vous connecter pour publier un commentaire.
Si vous savez quel type d'objets que vous le souhaitez à déconstruire du JSON (dont vous n'avez probablement), vous pouvez créer une méthode statique qui renvoie une instance de l'Objet.
Ensuite de les convertir au format JSON réponse à des instances de
MyClass
:Comment cela fonctionne:
.map(val => JSON.parse(val))
Juste convertit la réponse en JSON qui est un tableau d'objets..exhaustMap(val => new Rx.Observable.from(val))
Convertit chaque valeur d'une Observable etexhaustMap
aplatit entre eux de sorte que chaque objet à partir du JSON sera émis séparément..map(val => MyClass.fromObject(val))
Utilisationmap
de nouveau à la conversion de chaque Objet à une instance deMyClass
.Voir la démo en live: http://jsfiddle.net/f5k9zdh1/1/
OriginalL'auteur martin
OriginalL'auteur lps540
Essayer cette syntaxe, vous le lancez à votre objet:
response.json()
vous donne un tableau d'objets. J'ai mis à jour ma question avec la manière qui semble fonctionner, mais je n'aime pas de cette façon.OriginalL'auteur John Baird