2017-03-31 10 views
9

मैं मैं इस blog अनुसरण कर रहा हूँ कि के लिए उत्पादन के लिए angular2 आवेदन का निर्माण करने की कोशिश कर रहा हूँ। मेरी NGC सफल संकलन के बाद जब tsc संकलन लेता जगह यह छवि में दिखाया गया त्रुटि नीचे उत्पन्न करता है:संपत्ति 'एक्स' निजी और वर्ग के भीतर ही पहुँचा जा सकता है 'xyzComponent'

enter image description here

थोड़ी देर के लिए खोज करने के बाद मैं में इस blog जो समस्या बताते मिला " संदर्भ संपत्ति " अनुभाग जो मैं ठीक से समझने में सक्षम नहीं हूं, यह आपको कुछ अच्छा विचार दे सकता है कि क्या गलत हो रहा है। मूल रूप से जब हम एक परिवर्तनीय निजी बना रहे हैं तो हमें मिल रहा है "त्रुटि: संपत्ति निजी है और केवल कक्षा के भीतर पहुंच योग्य है"। मुझे समझ में नहीं आ रहा है कि यह क्यों आ रहा है।

कृपया हमें मदद करें क्योंकि हम पिछले कुछ दिनों से इस समस्या में अपने सिर को टक्कर दे रहे हैं।

+0

क्या आपने संपत्ति को निजी से सार्वजनिक में बदलने की कोशिश की है? –

+0

क्या आप टीएस फाइल सामग्री साझा कर सकते हैं जो त्रुटि फेंक रहा है? –

उत्तर

20

किसी दिए गए घटक के लिए इसके टेम्पलेट द्वारा एक्सेस किए गए सभी सदस्यों (विधियों, गुणों) को एओटी संकलन परिदृश्य में सार्वजनिक होना चाहिए। यह इस तथ्य के कारण है कि एक टेम्पलेट एक टीएस वर्ग में बदल जाता है। एक जेनरेट क्लास और एक घटक अब 2 अलग-अलग कक्षाएं हैं और आप निजी सदस्यों को क्रॉस-क्लास तक नहीं पहुंच सकते हैं।

संक्षेप में: यदि आप अगली बार संकलन का उपयोग करना चाहते हैं तो आप अपने टेम्पलेट्स में निजी सदस्यों तक नहीं पहुंच सकते हैं।

बेहतर explaination https://github.com/angular/angular/issues/11422

2

के लिए तो मैं इस समस्या को मैं इस छोटे और सरल रखेंगे तय की। इसे ठीक करने के लिए मैंने गहराई से यह blog पढ़ा। खंड में "संदर्भ संपत्ति" इस समस्या का समाधान यह है कि यदि आप एओटी (यानी, आगे के साथ अपना निर्माण बना रहे हैं तो सीधे इसे देखने में इसका उपयोग करना चाहते हैं तो एक निजी चर का उपयोग न करें या बनाएं उत्पादन के लिए समय)।

उदाहरण के लिए * *

// component.ts 
@Component({ 
    selector: 'third-party', 
    template: ` 
    {{ _initials }} 
    ` 
}) 
class ThirdPartyComponent { 
    private _initials: string; 
    private _name: string; 

    @Input() 
    set name(name: string) { 
    if (name) { 
     this._initials = name.split(' ').map(n => n[0]).join('. ') + '.'; 
     this._name = name; 
    } 
    } 
} 

उत्पादन: संपत्ति '_initials' निजी और वर्ग के भीतर ही पहुँचा जा सकता है 'ThirdPartyComponent'।

समाधान:

अद्यतन इस private _initials: string; बस _initials: string;

को यह जवाब Harish Gadiya के लिए मुझे इतना है कि के लिए thanx कुछ मदद प्रदान करते हैं।

+0

को '_name' का उपयोग करने की आवश्यकता नहीं है, यह वही हो सकता है जैसा आप' इस 'का उपयोग कर रहे हैं और अन्य' नाम 'का स्थानीय चर' this.name = name; ' – LazerBanana

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

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