2016-12-29 48 views
0

如何序列化由我的业务对象的http调用返回的rxjs observable?示例如下提到序列化rxjs可观察到自定义业务对象

myData.json:

[{ 
    "prop1" : "val1", 
    "prop2" : "val2", 
    "prop3" : "val3", 
    "prop4" : "val4", 
    }, { 
    "prop1" : "val11", 
    "prop2" : "val22", 
    "prop3" : "val33", 
    "prop4" : "val44", 
    },......] 

可观察:

this.myData$ = this._http.get('/data/myData.json') 
        .map(response => <any[]>response.json()); 

模板:

<ul> 
    <li class="text" *ngFor="let item of myData$ | async"> 
    {{item.prop1}} - {{item.prop2}} - {{item.prop3}} 
    </li> 
</ul> 

一切的伟大工程与上面的代码,但我需要改变JSON对象异步接收到不同业务对象的实例并仍然绑定异步到模板。我如何做到这一点。哪些rxjs运营商让我实现这一目标?

我的业务类:

export class Custom { 

    prop10: string; 
    prop20: string; 

    constructor(data) { 
     this.prop10 = this.evaluate(data.prop1); 
     this.prop20 = data.prop2; 

    } 
    private evaluate(val): string { 
     // do some custom business rules.... 
     return "something"; 
    } 
} 

我实际的模板

<ul> 
    <li class="text" *ngFor="let item of myData$ | async"> 
    {{item.prop10}} - {{item.prop20}} 
    </li> 
</ul> 

回答

1

一个简单的附加.map,在那里你每个阵列条目中映射应该工作:

this.myData$ = this._http.get('/data/myData.json') 
        .map(response => <any[]>response.json()) 
        .map(items => items.map(item => new Custom(item)); 
+0

这就是为容易:)谢谢!我想我应该深入学习rxjs操作符来理解它是如何工作的。 – Sal