इंजेक्शन लगाने ElementRef
और उपयोग करने querySelector
या वहां से समान के बजाय, सीधे देखने के तत्वों को एक्सेस करने के बजाय एक घोषणात्मक तरीके का उपयोग किया जा सकता है:
<input #myname>
@ViewChild('myname') input;
तत्त्व
ngAfterViewInit() {
console.log(this.input.nativeElement.value);
}
StackBlitz उदाहरण
- @ViewChild () पैरामीटर के रूप में निर्देश या घटक प्रकार, या टेम्पलेट चर के नाम (स्ट्रिंग) का समर्थन करता है।
- @ViewChildren () अल्पविराम से अलग की गई सूची (वर्तमान में कोई रिक्त स्थान की अनुमति नहीं
@ViewChildren('var1,var2,var3')
) के रूप में नामों की सूची का समर्थन करता है ।
- @ContentChild () और @ContentChildren () प्रकाश DOM (
<ng-content>
प्रोजेक्ट तत्वों) में भी ऐसा ही करते हैं ।
वंशज
@ContentChildren()
केवल वही है जो वंशजों के लिए क्वेरी करने की अनुमति देता है
@ContentChildren(SomeTypeOrVarName, {descendants: true}) someField;
{descendants: true}
डिफ़ॉल्ट होना चाहिए लेकिन 2.0.0 फाइनल में नहीं है और इसे बग माना जाता है।
यह 2.0.1 में तय किया गया था
पढ़ना
यदि कोई घटक और निर्देश हैं तो read
पैरामीटर निर्दिष्ट करने की अनुमति देता है कि किस उदाहरण को वापस किया जाना चाहिए।
उदाहरण के लिए ViewContainerRef
डिफ़ॉल्ट के बजाय गतिशील रूप से बनाए गए घटकों द्वारा आवश्यक हैElementRef
@ViewChild('myname', { read: ViewContainerRef }) target;
परिवर्तन की सदस्यता लें
भले ही बच्चों को केवल ngAfterViewInit()
कॉल करते समय सेट किया जाता है और सामग्री बच्चों को केवल तब सेट किया ngAfterContentInit()
जाता है जब उन्हें कॉल किया जाता है, यदि आप क्वेरी परिणाम के परिवर्तनों की सदस्यता लेना चाहते हैं, तो इसे अंदर किया जाना चाहिएngOnInit()
https://github.com/angular/angular/issues/9689#issuecomment-229247134
@ViewChildren(SomeType) viewChildren;
@ContentChildren(SomeType) contentChildren;
ngOnInit() {
this.viewChildren.changes.subscribe(changes => console.log(changes));
this.contentChildren.changes.subscribe(changes => console.log(changes));
}
सीधे डोम का उपयोग
केवल DOM तत्वों को क्वेरी कर सकते हैं, लेकिन घटक या निर्देश उदाहरण नहीं:
export class MyComponent {
constructor(private elRef:ElementRef) {}
ngAfterViewInit() {
var div = this.elRef.nativeElement.querySelector('div');
console.log(div);
}
// for transcluded content
ngAfterContentInit() {
var div = this.elRef.nativeElement.querySelector('div');
console.log(div);
}
}
मनमाना अनुमानित सामग्री प्राप्त करें
एक्सेस ट्रांसकोड की गई सामग्री देखें