2016-08-22 3 views
5

मैं विधि नक्शा ऑपरेटर द्वारा कहा जाता है में यह लौटने से पहले अपने डेटा को बदलने के लिए कोशिश कर रहा था और मैं पता चला सब मेरी उस विधि के अन्य चर बाहर undefinedनमूदार गुंजाइश परिवर्तन नक्शा ऑपरेटर द्वारा कहा जाता

मैंने लिखा हैं कि एक सरल कोड यहाँ नीचे प्रतिनिधित्व करने के लिए मैं क्या मतलब है, लॉग इन परीक्षण चर undefined के रूप में दिया जाता है:

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

@Injectable() 
export class DataService { 
    private API_URL= 'url...'; 

    private test = 1; 

    constructor(private http: Http) {} 

    getData(): Observable<any> { 
     return this.http.get(this.API_URL) 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
     let body = res.json(); 

     console.log(test); 

     return body.data || {}; 
    } 
} 

मुझे पता है कि यह क्यों हो रहा है चाहता था और अगर यह तरीका प्राप्त किए गए डेटा कैसे मैं यह कर सकता बदलने के लिए नहीं है सेवा में (ग्राहक घटक में नहीं क्योंकि मैं किसी अन्य चर के आधार पर डेटा बदलना चाहता हूं ग्राहक घटक के साथ कुछ नहीं)

+1

टाइपो का दायरा? क्या विधि 'निकालें SemanticData' या 'extractData' नाम की गई विधि है? – cartant

+0

हाँ टाइपो मैं चिपकाया कॉपी। मैं इसे संपादित करूंगा। धन्यवाद – Nima

उत्तर

5

एक जे एस "सुविधा" ;-)

आप .bind(this)

return this.http.get(this.API_URL) 
     .map(this.extractData.bind(this)) 
     .catch(this.handleError.bind(this)); 

या तीर कार्यों

return this.http.get(this.API_URL) 
     .map(val => this.extractData(val)) 
     .catch(err => this.handleError(err)); 

बनाए रखने के लिए उपयोग करने की आवश्यकता है कि है this

+1

यह काम करता है, धन्यवाद @ गुंटर ज़ोचबॉयर! मैंने इसे हल करने की कोशिश में कई घंटे बिताए। मैंने यह भी सोचा कि यह आलसी लोडिंग के कारण हो रहा था। परंतु ऐसा नहीं था। –

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