Używam Angular 2 (TypeScript).
Chcę coś zrobić z nową selekcją, ale onChange()
zawsze dostaję ostatnią selekcję. Jak mogę uzyskać nowy wybór?
<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
źródło
źródło
selectedDevice
gdy użytkownik wybierze inny element, i 2) jeśli ustawimy wartośćselectedDevice
, NgModel automatycznie zaktualizuje widok. Ponieważ chcemy również otrzymywać powiadomienia o zmianie, dodałem(change)
powiązanie zdarzenia. Nie powinniśmy tego robić w ten sposób ... powinniśmy być w stanie rozbić dwukierunkowe wiązanie danych[ngModel]="selectedDevice" and (ngModelChange)="onChange($event)"
, ale jak się dowiedziałem,onChange()
jest wywoływany dwukrotnie za każdą zmianę listy wyboru w ten sposób.<option *ngFor="#course of course_array #i=index" #newone value={{course.id}} >{{course.course_name}}</option>
course.course_name
icourse.id
oba, w jaki sposób mogę wysłać te dwa za pomocą (zmiany) funkcji?$event
zmienna / symbol jest częścią „kontekstu instrukcji”, który posiadają instrukcje szablonu Angular. Jeśli zamiast Pisałem(ngModelChange)="onChange('abc')"
wtedynewValue
dostanie ciągabc
. To tylko normalne wywołanie funkcji JavaScript.Możesz przekazać wartość z powrotem do komponentu, tworząc zmienną referencyjną w znaczniku select
#device
i przekazując ją do modułu obsługi zmianonChange($event, device.value)
powinien mieć nową wartośćźródło
ngModel
tutaj, wiążesz się z nową zmienną o nazwiedevice
.[(ngModel)]
tu chodziWystarczy użyć [ngValue] zamiast [wartość] !!
źródło
(change)="selectOrg(selectedOrg)"
wywołuje funkcję selectOrg z bieżącym / poprzednim wyborem, a nie nowo wybraną opcją. Zrozumiałem, że nawet nie potrzebuję(change)
trochę.Napotkałem ten problem podczas samouczka formularzy Angular 2 (wersja TypeScript) pod adresem https://angular.io/docs/ts/latest/guide/forms.html
Blok wyboru / opcji nie pozwalał na zmianę wartości zaznaczenia poprzez wybranie jednej z opcji.
Robienie tego, co zasugerował Mark Rajcok, zadziałało, chociaż zastanawiam się, czy coś mi umknęło w oryginalnym samouczku, czy też była aktualizacja. W każdym razie dodawanie
do hero-form.component.ts w klasie HeroFormComponent
i
do hero-form.component.html w
<select>
elemencie sprawiło, że działałźródło
użyj wyboru Zmień w kącie 6 i wyższym. przykład
(selectionChange)= onChange($event.value)
źródło
Inną opcją jest przechowywanie obiektu w wartości jako ciągu:
składnik:
To był jedyny sposób, w jaki mogłem uzyskać dwukierunkowe wiązanie działające, aby ustawić wybraną wartość przy ładowaniu strony. Stało się tak, ponieważ moja lista wypełniająca pole wyboru nie była dokładnie tym samym obiektem, z którym była związana moja selekcja i musi być tym samym obiektem, a nie tylko tymi samymi wartościami właściwości.
źródło
Użyłem tego do rozwijania materiału kątowego. działa w porządku
źródło
najnowszy ionic 3.2.0 zmodyfikował (zmień) na (ionChange)
np .: HTML
TS
źródło
Kątowy 7/8
Począwszy od kąta 6, użycie właściwości wejściowej ngModel z dyrektywą form reaktywnych zostało przestarzałe i całkowicie usunięte w kanciastym 7+. Przeczytaj oficjalny dokument tutaj.
Stosując podejście reaktywne, możesz pobrać / ustawić wybrane dane jako;
źródło
W Angular 5 zrobiłem w następujący sposób. pobierz obiekt $ event.value zamiast $ event.target.value
źródło
W Angular 8 możesz po prostu użyć „selectionChange” w następujący sposób:
źródło