2016-09-07 4 views
19

Angular 2 rc 6, typescript 2, node 4.5.0, npm 2.15.9 पर Windows 7कोणीय 2 आगे के समय संकलक: क्या मुझे सभी वर्ग गुणों को सार्वजनिक बनाना चाहिए?

मैं से जस्ट-इन-टाइम स्थानांतरित करने के लिए कोशिश कर रहा हूँ करने के लिए आगे के-समय संकलन और मैं इन संसाधनों पर निर्भर कर रहा हूँ:

मैं समझता हूँ कि मैं संकलक चलाने की आवश्यकता है कि फ़ाइलों को उत्पन्न करने के लिए, और मुझे को का उपयोग platformBrowserDynamic के बजाय बूटस्ट्रैप में बदलने की आवश्यकता है। मैंने हालांकि एक रोडब्लॉक मारा है और नहीं पता कि कैसे आगे बढ़ना है।

1. मैंने पुष्टि की है कि ऐप जस्ट-इन-टाइम संकलन का उपयोग करके त्रुटियों के बिना चलता है। मेरे main.ts है:

enableProdMode(); 
platformBrowserDynamic().bootstrapModule(AppModule); 

2. मैं अपने उत्पादन फ़ोल्डर से अपने सभी एप्लिकेशन फ़ाइलें साफ़ है, लेकिन 3 पार्टी पुस्तकालयों रख (जैसे: कोणीय 2, कोणीय 2 सामग्री)

3. मैं रन "node_modules/.bin/ngc" -p ./ यह कंसोल के लिए कोई आउटपुट नहीं चलाता है। मैं अपने .ts घटकों और मॉड्यूल में से प्रत्येक के लिए .ngfactory.ts फ़ाइल देखता हूं। मैं अपने .css में से प्रत्येक के लिए .css.shim.ts फ़ाइल भी देखता हूं जिसमें घटक शैलियों का आयोजन होता है। इसके अलावा, .js और .js.map फ़ाइलों transpiled किया गया है और उत्पादन निर्देशिका में रखा

4. अगर मैं इस बिंदु पर अनुप्रयोग चलाने के लिए प्रयास करते हैं, मुझे लगता है कि घटक टेम्पलेट्स आयोजित सभी .html फ़ाइलों के लिए 404 not found त्रुटियों को देखने

5. मैं मैन्युअल रूप से सभी टेम्पलेट फ़ाइलों (.html) को उत्पादन डीआईआर में ले जाता हूं और ऐप चलाता हूं।

enableProdMode(); 
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); 

अपने स्वयं पर, यह कोई फर्क नहीं पड़ता: यह ठीक (compiler.umd.js सहित 255 अनुरोधों,)

6. मैं बदल मेरी main.ts को चलाता है, लेकिन यह अभी भी बस में समय संकलन का उपयोग करता है चूंकि नया कोड संकलित नहीं किया गया है। हालांकि, मुझे नहीं पता कि यहां से क्या करना है।

क्या मुझे ngc फिर से चलाना चाहिए?

Error at C:/path/to/notify.component.ngfactory.ts:113:41: Property 'visible' is private and only accessible within class 'NotifyComponent' 
... (many more like that with lots of properties from lots of components) 
Compilation failed 

का उपयोग कर करता है AOT संकलन का मतलब है कि मैं अपने सभी वर्ग गुण को सार्वजनिक करना चाहिए: यदि ऐसा है तो मैं प्रकार की त्रुटियों के बहुत सारे मिल सकता है? क्या मुझे एक कदम याद आ रहा है?

उत्तर

32

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

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

+4

यही मैंने भी सोचा। इच्छा आयनिक दस्तावेज़ इस स्पष्ट को 'निजी परिवर्तनीय रूप से सार्वजनिक रूपांतरित करने' के रूप में स्पष्ट करते हैं – masimplo

4

तो Ionic2 RC1

फील्ड्स का संभावित हल setters

protected _myField: any; 

get myField(): any { 
    return this._myField; 
} 

बिना ही टिककर खेल का उपयोग करने के तुम भी AOT विचार करने के लिए अन्य JIT देख सकते हैं हो सकता है कोणीय 2 तिनका की अंतिम रिलीज़ में भी हैthis blog of Isaac Mann

  1. स्थिरांक लैम्ब्डा => निर्यात समारोह
  2. में अपने कोड अनुकूल करने के लिए 210
  3. डिफ़ॉल्ट निर्यात => निर्यात
  4. निजी, संरक्षित accessors टेम्पलेट से पहुँचा
  5. गतिशील घटक टेम्पलेट किसी भी सदस्यों के लिए जनता के लिए बदला जाना चाहिए => स्थिर टेम्पलेट
  6. moduleId templateUrl साथ
घटकों पर सेट किया जाना चाहिए नामित
संबंधित मुद्दे