Zugriff auf Vorlagenreferenzvariablen aus der Komponentenklasse


107
<div>
   <input #ipt type="text"/>
</div>

Ist es möglich, über die Komponentenklasse auf die Vorlagenzugriffsvariable zuzugreifen?

dh kann ich hier darauf zugreifen,

class XComponent{
   somefunction(){
       //Can I access #ipt here?
   }
}

Antworten:


150

Das ist ein Anwendungsfall für @ViewChild:

https://angular.io/docs/ts/latest/api/core/index/ViewChild-decorator.html

class XComponent {
   @ViewChild('ipt', { static: true }) input: ElementRef;

   ngAfterViewInit() {
      // this.input is NOW valid !!
   }

   somefunction() {
       this.input.nativeElement......
   }
}

Hier ist eine funktionierende Demo:

https://stackblitz.com/edit/angular-viewchilddemo?file=src%2Fapp%2Fapp.component.ts


Aber beim Debuggen bekomme ich this.input selbst als undefiniert.
— JackOfAll

Wie ich bereits erwähnte, ist es nur verfügbar, nachdem das Ereignis ngAfterViewInit()ausgelöst wurde. Sie müssen ViewChildaus '@ angle / core` importieren ..
— mxii

Aber wie können wir einen Wert setzen? Ich habe es versucht, this.ipt.nativeElement.setAttribute('value', 'xxx');aber nichts passiert. Und es gibt keine Methoden wie value()oder setValue(), auch wenn ich sie vom Typ HTMLInputElement deklariere (ich stütze mich dabei auf den Code-Hinweis / die automatische Vervollständigung von IDE). In meinem Fall ist es mir egal, den Wert zu lesen. Ich muss nur verschiedene Werte einstellen.
— MrCroft

Derzeit im Urlaub .. hast du es setPropertyauch versucht ?
— mxii

1
sollte nicht this.input.nativeElement.value = 'test'funktionieren ?! Vielleicht gibt es spezielle Verhaltensweisen mit Formen und ihren Bindungen.
— mxii
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.