2016-12-29 75 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