Wie kann ich ein Element in einer Komponentenvorlage auswählen?
Weiß jemand, wie man halt ein element definiert ein Komponenten-template? Polymer macht es wirklich einfach mit den $
und $$
.
Ich Frage mich nur, wie man es in Eckige.
Nehmen wir das Beispiel aus dem tutorial:
import {Component} from '@angular/core'
@Component({
selector:'display'
template:`
<input #myname(input)="updateName(myname.value)"/>
<p>My name : {{myName}}</p>
`
})
export class DisplayComponent {
myName: string = "Aman";
updateName(input: String) {
this.myName = input;
}
}
Wie fange ich halt eine Referenz des p
oder input
element aus der Klasse definition?
InformationsquelleAutor der Frage Aman Gupta | 2015-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie ein handle für das DOM-element über
ElementRef
durch Injektion in Ihre Komponenten Konstruktor:Docs: https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html
InformationsquelleAutor der Antwort Brocco
Statt Injektion
ElementRef
und mitquerySelector
oder ähnliches von dort aus eine deklarative Art und Weise können stattdessen verwendet werden, um Zugriff auf Elemente in der Ansicht direkt:element
StackBlitz Beispiel
@ViewChildren('var1,var2,var3')
).<ng-content>
projizierten Elemente).Nachkommen
@ContentChildren()
ist die einzige, die erlaubt auch die Abfrage für die Nachkommen{descendants: true}
sollte der Standard sein, ist aber nicht in 2.0.0 final, und es ist als ein bugDies wurde behoben in 2.0.1
Lesen
Wenn es eine Komponente und Richtlinien der
read
parameter kann angegeben werden, welche Instanz die zurückgegeben werden sollen.Beispielsweise
ViewContainerRef
erforderlich ist, dynamisch erzeugte Komponenten anstelle der Standard -ElementRef
abonnieren Veränderungen
Obwohl-Ansicht Kinder sind nur gesetzt, wenn
ngAfterViewInit()
genannt wird und Inhalte, die Kinder werden nur gesetzt, wennngAfterContentInit()
heißt, wenn Sie abonnieren möchten, um änderungen der Ergebnismenge der Abfrage, es sollte getan werden, inngOnInit()
https://github.com/angular/angular/issues/9689#issuecomment-229247134
direkten DOM-Zugriff
können nur die Abfrage von DOM-Elementen, aber nicht die Komponenten oder Richtlinie Instanzen:
bekommen willkürliche projizierten Inhalten
Sehen Zugang transcluded Inhalt
InformationsquelleAutor der Antwort Günter Zöchbauer
Beispiel aktualisiert, um die Arbeit mit der neuesten version
Weitere details auf nativen element, hier
InformationsquelleAutor der Antwort gdi2290
Gewinkelt 4+:
Verwenden
renderer.selectRootElement
mit einem CSS-Selektor zum Zugriff auf das element.Ich habe ein Formular, das zeigt zunächst eine E-Mail-Eingang. Nach der E-Mail eingegeben ist, wird das Formular erweitert werden, um Ihnen zu ermöglichen, weiterhin Informationen hinzufügen Bezug auf Ihr Projekt. Allerdings, wenn Sie nicht bestehenden Kunden, die form wird auch eine Adresse im Abschnitt über die Projekt-Informationen Abschnitt.
Als jetzt, das Dateneingabe Teil wurde nicht gebrochen, die bis in die Komponenten, so dass die Abschnitte verwaltet werden, *ngIf-Richtlinien. Ich brauche, um den Fokus auf die Projekt-Notizen-Feld, wenn Sie eine bestehende client oder das erste Feld name, wenn Sie neu sind.
Ich habe versucht, die Lösungen ohne Erfolg. Jedoch Update 3 in diese Antwort gab mir die Hälfte von der letztendlichen Lösung. Die andere Hälfte kam aus MatteoNY Antwort in diese thread. Das Ergebnis ist dieses:
Da das einzige, was ich Tue, ist die Einstellung, die den Fokus auf ein element, brauche ich nicht zu betreffen, mich mit der Erkennung von änderungen, so kann ich tatsächlich den Anruf zu
renderer.selectRootElement
außerhalb von Eckigen. Weil ich muss zu geben, den neuen Abschnitten der Zeit zu machen, ist das element Abschnitt ist eingehüllt in ein timeout zu ermöglichen, um die rendering-threads, Zeit, um aufzuholen, bevor die element-Auswahl versucht wird. Nachdem alle, setup, ich kann rufen Sie einfach das element mit grundlegenden CSS-Selektoren.Ich weiß, dieses Beispiel beschäftigt sich vor allem mit dem Fokus-Ereignis, aber es ist schwer für mich, dass das nicht in anderen zusammenhängen genutzt.
InformationsquelleAutor der Antwort Neil T.
Für Menschen, die versuchen zu greifen, die Komponenten-Instanz innerhalb einer
*ngIf
oder*ngSwitchCase
können Sie diesen trick.Erstellen Sie eine
init
Richtlinie.Exportieren Sie Ihre Komponente mit einem Namen wie
myComponent
Verwenden Sie diese Vorlage, um die
ElementRef
UNDMyComponent
InstanzVerwenden Sie diesen code in TypeScript
InformationsquelleAutor der Antwort jsgoupil
importieren Sie die ViewChild decorator von @Winkel/Kern, etwa so:
nun können Sie 'myForm' - Objekt Zugriff auf ein beliebiges element in der Klasse.
Quelle:
https://codecraft.tv/courses/angular/forms/template-driven/
InformationsquelleAutor der Antwort Hany
InformationsquelleAutor der Antwort Eng.Gabr
Möchte ich hinzufügen, dass wenn Sie
ElementRef
wie empfohlen alle Antworten, dann werden Sie sofort auf das problem stoßen, dassElementRef
hat eine schreckliche Art Erklärung, die aussieht wiedas ist dumm, in einer browser-Umgebung, wo nativeElement ist ein
HTMLElement
.Zur Umgehung dieses können Sie verwenden Sie die folgende Technik
InformationsquelleAutor der Antwort Aluan Haddad
bekommen die nächsten Geschwister ,verwenden Sie diese
InformationsquelleAutor der Antwort Apoorv
Auswahl Ziel-element aus der Liste. Es ist leicht zu wählen Sie das element aus der Liste mit den gleichen Elementen.
Komponente code:
html-code:
css-code:
InformationsquelleAutor der Antwort Sai Goud