Ich verwende Angular 2 (TypeScript).
Ich möchte etwas mit der neuen Auswahl machen, aber was ich bekomme, onChange()
ist immer die letzte Auswahl. Wie kann ich die neue Auswahl erhalten?
<select [(ngModel)]="selectedDevice" (change)="onChange($event)">
<option *ngFor="#i of devices">{{i}}</option>
</select>
onChange($event) {
console.log(this.selectedDevice);
// I want to do something here with the new selectedDevice, but what I
// get here is always the last selection, not the one I just selected.
}
angular
typescript
Hongbo Miao
quelle
quelle
selectedDevice
wenn der Benutzer ein anderes Element auswählt, und 2) wenn wir den Wert vonselectedDevice
festlegen, aktualisiert NgModel die Ansicht automatisch. Da wir auch über eine Änderung informiert werden möchten, habe ich die(change)
Ereignisbindung hinzugefügt . Wir sollten es nicht so machen müssen ... wir sollten in der Lage sein, die bidirektionale Datenbindung aufzuteilen[ngModel]="selectedDevice" and (ngModelChange)="onChange($event)"
, aber wie ich herausgefunden habe,onChange()
wird sie für jede Auswahllistenänderung auf diese Weise zweimal aufgerufen.<option *ngFor="#course of course_array #i=index" #newone value={{course.id}} >{{course.course_name}}</option>
course.course_name
undcourse.id
beiden erhalten. Wie kann ich diese beiden über die (Änderungs-) Funktion senden?$event
Variable / das spezielle Symbol ist Teil des "Anweisungskontexts", den Angular-Vorlagenanweisungen haben. Wenn stattdessen schrieb ich(ngModelChange)="onChange('abc')"
dannnewValue
würde die Zeichenfolge erhaltenabc
. Es ist nur ein normaler JavaScript-Funktionsaufruf.Sie können den Wert an die Komponente zurückgeben, indem Sie eine Referenzvariable für das select-Tag erstellen
#device
und diese an den Änderungshandler übergebenonChange($event, device.value)
, der den neuen Wert haben solltequelle
ngModel
an eine neue Variable namensdevice
.[(ngModel)]
hierVerwenden Sie einfach [ngValue] anstelle von [Wert] !!
quelle
(change)="selectOrg(selectedOrg)"
ruft die Funktion selectOrg mit der aktuellen / vorherigen Auswahl auf, nicht mit der neu ausgewählten Option. Ich habe herausgefunden, ich brauche nicht einmal das(change)
bisschen.Ich bin auf dieses Problem gestoßen, als ich das Angular 2-Formular-Tutorial (TypeScript-Version) unter https://angular.io/docs/ts/latest/guide/forms.html ausgeführt habe
Der Auswahl- / Optionsblock erlaubte nicht, den Wert der Auswahl durch Auswahl einer der Optionen zu ändern.
Das zu tun, was Mark Rajcok vorgeschlagen hat, hat funktioniert, obwohl ich mich frage, ob ich im ursprünglichen Tutorial etwas verpasst habe oder ob es ein Update gab. In jedem Fall hinzufügen
zu hero-form.component.ts in der HeroFormComponent-Klasse
und
zu hero-form.component.html im
<select>
Element hat es funktioniertquelle
Verwenden Sie selectionChange in Winkel 6 und höher. Beispiel
(selectionChange)= onChange($event.value)
quelle
Eine andere Möglichkeit besteht darin, das Objekt im Wert als Zeichenfolge zu speichern:
Komponente:
Dies war die einzige Möglichkeit, die bidirektionale Bindung zum Festlegen des Auswahlwerts beim Laden der Seite zu aktivieren. Dies lag daran, dass meine Liste, die das Auswahlfeld ausfüllt, nicht genau dasselbe Objekt war, an das meine Auswahl gebunden war, und dass es dasselbe Objekt sein muss, nicht nur dieselben Eigenschaftswerte.
quelle
Ich habe dies für das eckige Material-Dropdown verwendet. funktioniert gut
quelle
Die neuesten ionischen Versionen 3.2.0 wurden geändert (ändern) zu (ionChange)
zB: HTML
TS
quelle
Winkel 7/8
Ab Winkel 6 wurde die Verwendung der Eingabeeigenschaft ngModel mit der Richtlinie für reaktive Formen in Winkel 7+ veraltet und insgesamt entfernt. Lesen Sie hier das offizielle Dokument.
Mit dem reaktiven Formularansatz können Sie ausgewählte Daten abrufen / festlegen als;
quelle
In Angular 5 habe ich Folgendes getan. Holen Sie sich das Objekt $ event.value anstelle von $ event.target.value
quelle
In Angular 8 können Sie einfach "selectionChange" wie folgt verwenden:
quelle