Vorlagenreferenzvariablen sind ein kleines Juwel, mit dem Sie viele schöne Dinge mit Angular erledigen können. Normalerweise nenne ich diese Funktion "Hashtag-Syntax", da sie sich auf ein einfaches Hashtag stützt, um einen Verweis auf ein Element in einer Vorlage zu erstellen:
<input #phone placeholder="phone number">
Die obige Syntax ist recht einfach: Sie erstellt einen Verweis auf das Eingabeelement , der später in meiner Vorlage verwendet werden kann. Beachten Sie, dass der Bereich für diese Variable die gesamte HTML-Vorlage ist, in der die Referenz definiert ist.
So könnte ich diese Referenz verwenden, um den Wert der Eingabe zu erhalten, zum Beispiel:
<!-- phone refers to the input element -->
<button (click)="callPhone(phone.value)">Call</button>
Beachten Sie, dass das Telefon für die Eingabe auf die HTMLElement- Objektinstanz verweist . Infolgedessen verfügt das Telefon über alle Eigenschaften und Methoden eines HTMLElement (ID, Name, innerHTML, Wert usw.).
Dies ist eine gute Möglichkeit, um die Verwendung von ngModel oder einer anderen Art der Datenbindung in einer einfachen Form zu vermeiden, die hinsichtlich der Validierung nicht viel erfordert.
Funktioniert das auch mit Komponenten?
Die Antwort ist ja!
... das Beste daran ist, dass wir einen Verweis auf die eigentliche Komponenteninstanz HelloWorldComponent erhalten, damit wir auf alle Methoden oder Eigenschaften dieser Komponente zugreifen können (auch wenn sie als privat oder geschützt deklariert sind, was überraschend ist). ::
@Component({
selector: 'app-hello',
// ...
export class HelloComponent {
name = 'Angular';
}
[...]
<app-hello #helloComp></app-hello>
<!-- The following expression displays "Angular" -->
{{helloComp.name}}
#searchBox
das Element haben, können Sie essearchBox.value
im Keyup-Handler verwenden.