2016-05-18 6 views
7

में टाइप किए गए ऑब्जेक्ट के एक नए उदाहरण में http.get से प्रतिक्रिया को मैप करने के लिए कैसे करें मैं http.get और Observables का उपयोग कर किसी ऑब्जेक्ट में किसी सेवा कॉल से परिणाम को मैप करने का तरीका समझने की कोशिश कर रहा हूं कोणीय 2.Angular 2

में इस Plunk

विधि getPersonWithGetProperty मैं प्रकार PersonWithGetProperty की एक नमूदार वापस जाने के लिए उम्मीद कर रहा हूँ में पर एक नजर डालें। तथापि! मैं पूर्ण नाम संपत्ति का उपयोग नहीं कर सकता। मुझे लगता है कि मुझे क्लास पर्सविथ गेटप्रॉपर्टी क्लास का एक नया उदाहरण बनाना होगा और क्लास कन्स्ट्रक्टर का उपयोग करके इस नए ऑब्जेक्ट की प्रतिक्रिया को मैप करना होगा। लेकिन आप इस विधि में कैसे करते हैं PersonWithGetProperty?

import {Injectable} from '@angular/core'; 
import {Http, Response} from '@angular/http'; 
import {Observable} from 'rxjs/Rx'; 

export class PersonWithGetProperty { 
    constructor(public firstName: string, public lastName: string){} 

    get fullName(): string { 
    return this.firstName + ' ' + this.lastName; 
    } 
} 

@Injectable() 
export class PersonService { 
    constructor(private http: Http) { 
    } 

    getPersonWithGetProperty(): Observable<PersonWithGetProperty> { 
     return this.http.get('data/person.json') 
     .map((response: Response) => <PersonWithGetProperty>(response.json())); 
    } 
} 

उत्तर

15

समस्या यह है कि आप कक्षा की तरह व्यवहार करने के लिए पार्स किए गए जेसन को मजबूर कर रहे हैं।

<PersonWithGetProperty> लागू करना वास्तव में PersonWithGetProperty का नया उदाहरण नहीं बना रहा है, यह केवल संकलक को बंद करने के लिए कह रहा है क्योंकि आप जानते हैं कि आप क्या कर रहे हैं। यदि आप वास्तव में एक उदाहरण PersonWithGetProperty बनाना चाहते हैं तो आपको इसे new के साथ बनाना होगा।

सौभाग्य से आप पहले से ही आधा रास्ता देखते हैं, सिर्फ एक और map जोड़ने के बाद आप उत्पादन पार्स है

@Injectable() 
export class PersonService { 
    constructor(private http: Http) { 
    } 

    getPersonWithGetProperty(): Observable<PersonWithGetProperty> { 
     return this.http.get('data/person.json') 
     .map((response: Response) => response.json()) 
     .map(({firstName, lastName}) => new PersonWithGetProperty(firstName, lastName)); 
    } 
} 
+0

चीजों को साफ़ करने के लिए मुझे के लिए धन्यवाद! –

+0

क्या आपके पास एक बहुत ही जटिल वस्तु या वस्तु है जिसके बारे में आप केवल इसके निर्माता का उपयोग करके कॉपी नहीं कर सकते हैं? उदाहरण के लिए, कन्स्ट्रक्टर के बिना एक वस्तु। –

+1

@ कार्लोस एड्रियान तो आप ऑब्जेक्ट फ़ैक्टरी का उपयोग करते हैं या आप ऑब्जेक्ट पर उपयोग करने के तरीकों को बाहरी करते हैं। – paulpdaniels

संबंधित मुद्दे