2016-08-03 7 views
6

यदि मेरे पास एक कोणीय 2 घटक है और मुझे ऐसी सेवा से डेटा मिलता है जो एसिंक वादा देता है या देखे जा सकता है तो मैं उस डेटा को प्रदर्शित करने के लिए घटक में एक विधि कैसे कॉल कर सकता हूं?मैं कोणीय 2 में एक वादे के अंदर कक्षा विधि कैसे कॉल कर सकता हूं?

@Component({ 
    moduleId: module.id, 
    selector: 'charts', 
    templateUrl: 'charts.component.html', 
    providers: [DataService] 
}) 
export class ChartsComponent implements OnInit { 

    constructor(private dataService:DataService) 

    ngOnInit() { 
    this.getData(); 
    } 

    getData(){ 
    this.dataService.getData().then(function (data) { 
     this.drawChart(data); 
    }); 
    } 

    drawChart(){ 
    //implement drawing chart 
    } 
} 

समस्या यह है कि एक वादा अंदर "इस" "this.drawChart()" में नहीं रह गया है ChartsComponent श्रेणी को संदर्भित करता है। मैं क्लास विधि पोस्ट वादे कैसे कॉल कर सकता हूं?

इसके अलावा, मैं वादे के अंदर drawChart() डाल नहीं सकता क्योंकि इसे अन्य वर्ग गुणों का उपयोग करने की आवश्यकता है।

उत्तर

13

जब आप Arrow functions उपयोग करते हैं, this रखा जाता है:

getData(){ 
    this.dataService.getData().then((data) => { // <-- changed here 
    this.drawChart(data); 
    }); 
} 
+0

धन्यवाद! तुमने मुझे दीवार पर ज्यादा सिर टक्कर लगी। – Quinma

5

2 समाधान कर रहे हैं:

1) "स्व" का उपयोग कर:

 var self = this; 
    ngOnInit() { 
     self.getData(); 
    } 

    getData(){ 
     self.dataService.getData().then(function (data) { 
     self.drawChart(data); 
    }); 

}

2) "बाइंड विधि" (या ऐसा कुछ) का उपयोग करके:

.then(function (data) { 
     this.drawChart(data); 
    }).bind(this) 

आप इस विधि के बारे में इतनी जानकारी, उदाहरण के लिए मिल सकते हैं: Use of the JavaScript 'bind' method

मैं, पहले समाधान पसंद है क्योंकि यह मदद करता है कोड को अधिक पारदर्शी बनाने।

+0

धन्यवाद, मैं पहले समाधान का उपयोग कर रहा हूं। –

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