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

관련 문제