将rxjs Observable序列化为自定义业务对象

时间:2016-12-29 15:38:15

标签: angular rxjs rxjs5

如何序列化对我的业务对象的http调用返回的rxjs observable?样品如下所述

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 个答案:

答案 0 :(得分:1)

一个简单的附加.map,您可以在其中映射每个数组条目:

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