कोणीय 2 प्रदान करता है @ViewChild
, @ViewChildren
, @ContentChild
और @ContentChildren
एक घटक के वंशज तत्वों क्वेरी करने के लिए सज्जाकार।
पहले दो और बाद वाले दो में क्या अंतर है?
कोणीय 2 प्रदान करता है @ViewChild
, @ViewChildren
, @ContentChild
और @ContentChildren
एक घटक के वंशज तत्वों क्वेरी करने के लिए सज्जाकार।
पहले दो और बाद वाले दो में क्या अंतर है?
जवाबों:
मैं शैडो डोम और लाइट डोम शब्दावली का उपयोग करके आपके प्रश्न का उत्तर दूंगा (यह वेब घटकों से आया है, यहां देखें )। सामान्य रूप में:
@Component({
selector: 'some-component',
template: `
<h1>I am Shadow DOM!</h1>
<h2>Nice to meet you :)</h2>
<ng-content></ng-content>
`;
})
class SomeComponent { /* ... */ }
@Component({
selector: 'another-component',
directives: [SomeComponent],
template: `
<some-component>
<h1>Hi! I am Light DOM!</h1>
<h2>So happy to see you!</h2>
</some-component>
`
})
class AnotherComponent { /* ... */ }
तो, आपके सवाल का जवाब बहुत आसान है:
के बीच का अंतर
@ViewChildren
और@ContentChildren
वह यह है कि@ViewChildren
छाया डोम में तत्वों थोड़ी देर के लिए देखो@ContentChildren
लाइट डोम में उनके लिए देखो।
@TemplateChildren
(के बजाय @ViewChildren
) या @HostChildren
(के बजाय @ContentChildren
) बहुत बेहतर नाम होंगे, जैसे कि इस संदर्भ में हम जिस चीज के बारे में बात कर रहे हैं वह देखने से संबंधित है, और राइट बाइंडिंग सामग्री से संबंधित भी है।
@ViewChildren
== आपका अपना बच्चा; @ContentChildren
== किसी और का बच्चा
नाम से पता चलता है, के रूप @ContentChild
और @ContentChildren
प्रश्नों के अंदर मौजूदा निर्देशों वापस आ जाएगी <ng-content></ng-content>
आपके विचार के तत्व है, जबकि @ViewChild
और @ViewChildren
केवल तत्वों है कि आपके विचार टेम्पलेट पर सीधे कर रहे हैं देखो।
Angular Connect के इस वीडियो में ViewChildren, ViewChild, ContentChildren और ContentChild https://youtu.be/4YmnbGoh49U के बारे में बेहतरीन जानकारी है।
@Component({
template: `
<my-widget>
<comp-a/>
</my-widget>
`
})
class App {}
@Component({
selector: 'my-widget',
template: `<comp-b/>`
})
class MyWidget {}
के my-widget
दृष्टिकोण से, comp-a
है ContentChild
और comp-b
है ViewChild
। CompomentChildren
और ViewChildren
xerhild एकल उदाहरण लौटाते समय एक पुन: चलाने योग्य है।
<comp-b><ng-content></ng-content></comp-b>
सही होना चाहिए ?
एक उदाहरण लेते हैं, हमारे पास एक घरेलू घटक और एक बाल घटक है और बाल घटक के अंदर एक छोटा बच्चा घटक है।
<home>
<child>
<small-child><small-child>
</child>
</home>
अब आप @viewChildren के साथ घरेलू घटक के संदर्भ में सभी बच्चों के तत्वों को पकड़ सकते हैं क्योंकि ये सीधे घरेलू घटक के टेम्पलेट में जोड़े जाते हैं। लेकिन, जब आप <small-child>
तत्व को चाइल्ड कंपोनेंट के संदर्भ से एक्सेस करने की कोशिश करते हैं तो आप इसे एक्सेस नहीं कर सकते क्योंकि यह सीधे चाइल्ड कंपोनेंट टेम्पलेट में नहीं जोड़ा जाता है। यह घरेलू घटक द्वारा बाल घटक में सामग्री के प्रक्षेपण के माध्यम से जोड़ा जाता है। यह वह जगह है जहां @contentChild आता है और आप इसे @contentChild के साथ पकड़ सकते हैं।
अंतर तब होता है जब आप नियंत्रक में तत्वों के संदर्भ तक पहुंचने का प्रयास करते हैं। आप सीधे @viewChild द्वारा घटक के टेम्पलेट में जोड़े गए सभी तत्वों को हड़प सकते हैं। लेकिन आप @viewChild के साथ अनुमानित तत्वों के संदर्भ को नहीं पकड़ सकते हैं अनुमानित प्रोजेक्ट तक पहुंचने के लिए आपको @contentChild का उपयोग करना होगा।