2016-01-12 22 views
5

गॉट:कोणीय 2. एचटीपी। सदस्यता लें: "इस" सूचक

http.request('js/app/config/config.json').subscribe(data => { 
      this.url = data.json().url; 
     }); 

और किसी भी तरह "इस" अंक सब्सक्राइबर करने के लिए। पता नहीं क्यों ... कारण मैंने सोचा कि वसा-तीर लैम्ब्डा माता-पिता के वर्ग सूचक को पकड़ लेगा।

ऐसा क्यों?

+0

आप खेल के मैदान में देख सकते हैं (http://www.typescriptlang.org/Playground) कि 'this' सही मान है: http: // bit.ly/1ZXO53U –

+0

@shtpavel, मेरा उत्तर जांचें और उत्तर में उल्लिखित दस्तावेज़ देखें। –

+0

d.pr/i/iBa इसे जांचें .. मैं क्या गलत कर रहा हूं? – korovaisdead

उत्तर

1

यह ES6 तीर फ़ंक्शन फ़ीचर संदर्भ के लिए एक और चर बनाने से बचने के लिए है। आप एक तीर फंक्शन के "यह" को ओवरराइड नहीं कर सकते हैं।

http.request('js/app/config/config.json').subscribe(function(data) { 
    this.url = data.json().url; 
}); 

इस दस्तावेज़ के संदर्भ लें: http://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/

+0

शायद आपको समझ में नहीं आया .. मुझे पता है कि तीर का क्या मतलब है। लेकिन लैम्बडा के अंदर "यह" कक्षा में नहीं है। इसे देखें: http://d.pr/i/iBa – korovaisdead

+0

क्या आप पूरी getCompanies विधि को प्रश्न में साझा कर सकते हैं –

2

तीर कार्यों के लिए अपने स्वयं this मूल्य नहीं है।this का मूल्य एक तीर फ़ंक्शन के अंदर हमेशा आपके क्षेत्र Subscriber में संलग्न क्षेत्र से विरासत में मिला है।

ईएस 6 संस्करण में, ध्यान दें कि subscribe विधि अपने कॉलर से this प्राप्त करती है। आंतरिक कार्य एक तीर कार्य है, इसलिए इसे this संलग्नक क्षेत्र से प्राप्त होता है।

5

स्क्रीनशॉट के आधार पर: http://d.pr/i/iBa

enter image description here

आप कंसोल में this डीबग कर रहे हैं। कृपया ध्यान दें कि कंसोल पर thisवास्तविक यह होगा। जब टाइपस्क्रिप्ट गैर ES6 जावास्क्रिप्ट के लिए एक तीर फ़ंक्शन उत्पन्न करता है (जिसमें तीर फ़ंक्शंस के लिए मूल समर्थन नहीं है) this_this (और अन्य चीजों) पर मैप किया गया है जिसका अर्थ है कि आपको _this देखने की आवश्यकता है।

टीआईपी

टाइपस्क्रिप्ट सीखते समय जेनरेट की गई जावास्क्रिप्ट को डीबग करें। यदि आप रुचि रखते हैं तो यह टाइपस्क्रिप्ट बग है: https://github.com/Microsoft/TypeScript/issues/2859

3

मैं एक वैकल्पिक हल मिल गया है, तुम कोशिश कर सकते इस

http.request('js/app/config/config.json').subscribe((function (data) { 
    this.url = data.json().url; 
}).bind(this)); 
संबंधित मुद्दे