I have this simple Component
import {Component} from \'angular2/core\';
import {RouterLink, RouteParams} from \'angular2/router\';
import {Http, Response, He
Found a solution here: https://stackoverflow.com/a/29759472/2854890
My Method now looks like this:
constructor(private routeParams: RouteParams,
public http: Http) {
this.user = new User();
this.http.get('http://localhost:3000/user/' + this.routeParams.get('id'))
.map((res: Response) => res.json())
.subscribe((json: Object) => {
this.user = new User().fromJSON(json);
});
}
I enhanced the Serializable
by returning the object in the end, so I can leave out something like
var u = new User();
u.fromJSON(...);
and just write
new User().fromJSON(json);
Serializable
class
export class Serializable {
fromJSON(json) {
for (var propName in json)
this[propName] = json[propName];
return this;
}
}
That's not supported by TypeScript.
See How do I cast a JSON object to a typescript class for more details.
Good practice is to consume data from GET response using
Observable<Model>
(regarding to Angular documentation https://angular.io/guide/http) so...
// imports
import {HttpClient} from "@angular/common/http";
// in constructor parameter list
private http: HttpClient
// service method
getUser(): Observable<User> {return this.http.get<User>({url}, {options});}
You do not need to do anything more. I consider this approach as most friendly.