2016-12-29 3 views
0

Как сериализовать наблюдаемый rxjs, возвращаемый вызовом http для моего бизнес-объекта? Образец упоминается нижеСериализация rxjs Наблюдение за настраиваемыми бизнес-объектами

myData.json:

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

Observable:

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

Thats было просто :) спасибо! Наверное, я должен подробно изучить операторы rxjs, чтобы понять, как это работает. – Sal

 Смежные вопросы

  • Нет связанных вопросов^_^