2016-02-28 10 views
5

चलो कहते हैं कि मैं एक घटक है दो:Angular2 - जाओ घटक प्रकाश डोम innerHTML/बच्चे नोड्स

@Component({ 
    selector: 'foo', 
    template: '<div>foo</div>' 
}) 
export class Foo {} 

और मैं इस तरह एक और घटक में उपभोग:

<foo> 
    <h1>some inner HTML</h1> 
</foo> 

मैं कैसे जान सकता यदि Foo प्रकाश डीओएम में कोई बाल तत्व है?

मैं <h1>some inner HTML</h1> के ahold पाने के लिए चाहते हैं।

विकल्प 1 - @ContentChildren(): यह मनमाना तत्व क्वेरी करने के लिए इस्तेमाल नहीं किया जा सकता है; वर्तमान में केवल कोणीय 2 घटक या चर (#foo) इस तरह से पूछे जा सकते हैं। यदि मैं इससे बच सकता हूं तो मैं आंतरिक तत्वों में एक चर को संलग्न नहीं करना चाहता हूं।

विकल्प 2 - elementRef.nativeElement: मैं Foo घटक में ElementRef इंजेक्षन कर सकते हैं, लेकिन समय के घटक instantiated है (निर्माता में) द्वारा, भीतरी तत्वों को पहले ही हटा दिया गया है, और यह खाली हो जाएगा। जीवन चक्र (जैसे ngAfterViewInit()) में बाद में आंतरिक तत्वों सिर्फ छाया डोम (अर्थात <div>foo</div>) हो जाएगा।

किसी भी अन्य तरीके कि मुझे याद आ रही?

प्रकरण उपयोग

के बारे में कारण है कि मैं ऐसा करना चाहते हैं कुछ संदर्भ देने के लिए, मैं जो एक डिफ़ॉल्ट टेम्पलेट है, जो एक कस्टम टेम्पलेट द्वारा बदले जा सकते उपयोगकर्ता निर्णय लेता है तो एक पुस्तकालय घटक बनाने रहा हूँ। तो मेरी डिफ़ॉल्ट टेम्पलेट इस तरह दिखता है:

<div *ngIf="hasTemplate"><ng-content></ng-content></div> 
<div *ngIf="!hasTemplate"><!-- the default template --></div> 

मैं किसी तरह की जरूरत है true को hasTemplate स्थापित करने के लिए अगर वहाँ <foo>..</foo> टैग के अंदर एचटीएमएल है।

उत्तर

4
  • आप encapsulation: ViewEncapsulation.Native स्विच कर सकते हैं तो सामग्री प्रकाश डोम में होगा

  • आप <div #wrapper><ng-content><ng-content><div> के चारों ओर एक आवरण तत्व जोड़ सकते हैं तो आप "छाया डोम" से तत्वों प्राप्त कर सकते हैं

+1

का उपयोग नहीं करता है 'ViewEncapsulation.Native' मतलब है कि मैं एक ब्राउज़र है कि छाया डोम को लागू करने के लिए सीमित कर रहा हूँ? मैं एक पुनः उपयोग करने योग्य पुस्तकालय का निर्माण कर रहा हूं और जितना संभव हो सके व्यापक समर्थन की आवश्यकता है। इसके अलावा - हाँ, यह आपके काम के अनुसार काम करता है। –

+0

हां, आपको उन ब्राउज़रों पर वेब-घटक पॉलीफ़िल जोड़ना होगा जो इसे मूल रूप से समर्थन नहीं देते हैं। क्या रैपर दृष्टिकोण भी काम करता है? आप 'एनजी-सामग्री' तत्व से सामग्री प्रश्न पूछने के लिए समर्थन जोड़ने के लिए कोणीय रेपो में एक सुविधा अनुरोध बना सकते हैं। –

+0

@ गुएंटर - ठीक है, यह पहला विकल्प बनाता है, मुझे डर लगता है। काम करने के लिए रैपर दृष्टिकोण नहीं मिल सकता है। मैंने अपने उपयोग के मामले को स्पष्ट करने के लिए प्रश्न में कुछ और जानकारी दी। 'जब मैं उसकी सामग्री और' ContentChildren ('आवरण' का निरीक्षण करने की कोशिश के बाद से मुझे लगता है कि मैं अपने "कस्टम" टेम्पलेट आवरण पर एक 'ngIf' है, यह सिर्फ' रूप में प्रकट होता) 'उपज' शून्य '। मुझे लगता है कि पर कोणीय/कोणीय एक मुद्दा शायद जाने के लिए रास्ता है। –

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