Angular2.将http响应映射到具体对象实例

roo*_*ook 5 json rxjs angular-http angular

处理http响应的Сommon方法是这样的:

return this._http.get(url)
           .map((res: Response) => res.json());
Run Code Online (Sandbox Code Playgroud)

这提供了一个Observable<Object[]>其中Object被动态创建从JSON反序列化类型.然后你可以在*ngFor="let item of result | async"等等中使用这个结果......

我想获得一个特定的类型实例(意味着使用newoperator来调用类型的构造函数).尝试了不同的方法来实现这样的目标:

.map((res: Response) => { let obj = res.json(); return new MyObject(obj.id, obj.name);})
Run Code Online (Sandbox Code Playgroud)

但得到这个错误: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

这种方式似乎有效,但它过于复杂,可能无效:

.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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Joh*_*ird 0

尝试这个语法,将它转换为你的对象:

 this.http.post(this.constants.taskUrl + parm, { headers: headers })
            .map((response: Response) => {
                var res = response.json();
                var result = <DataResponseObject>response.json();
                return result;
            })
Run Code Online (Sandbox Code Playgroud)