J'utilise Angular 2 (TypeScript).
Je veux faire quelque chose avec la nouvelle sélection, mais je reçois onChange()
toujours la dernière sélection. Comment puis-je obtenir la nouvelle sélection?
<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
la source
la source
selectedDevice
à jour lorsque l'utilisateur sélectionne un élément différent, et 2) si nous définissons la valeur deselectedDevice
, NgModel mettra automatiquement à jour la vue. Comme nous voulons également être informés d'un changement, j'ai ajouté la(change)
liaison d'événement. Nous ne devrions pas avoir à le faire de cette façon ... nous devrions être en mesure de diviser la liaison de données bidirectionnelle en[ngModel]="selectedDevice" and (ngModelChange)="onChange($event)"
, mais comme je l'ai découvert,onChange()
est appelé deux fois pour chaque changement de liste de sélection de cette façon.<option *ngFor="#course of course_array #i=index" #newone value={{course.id}} >{{course.course_name}}</option>
course.course_name
et lescourse.id
deux comment puis-je envoyer ces deux via la fonction (changer)?$event
variable / le symbole spécial fait partie du "contexte d'instruction" des instructions de modèle angulaire. Si à la place j'écrivais(ngModelChange)="onChange('abc')"
alorsnewValue
j'obtiendrais la chaîneabc
. C'est juste un appel normal à une fonction JavaScript.Vous pouvez retransmettre la valeur dans le composant en créant une variable de référence sur la balise select
#device
et en la passant dans le gestionnaire de modificationsonChange($event, device.value)
devrait avoir la nouvelle valeurla source
ngModel
ici, vous êtes lié à une nouvelle variable appeléedevice
.[(ngModel)]
iciUtilisez simplement [ngValue] au lieu de [value] !!
la source
(change)="selectOrg(selectedOrg)"
appelle la fonction selectOrg avec la sélection actuelle / précédente, pas l'option nouvellement sélectionnée. J'ai compris, je n'ai même pas besoin du(change)
bit.J'ai rencontré ce problème lors du didacticiel sur les formulaires Angular 2 (version TypeScript) sur https://angular.io/docs/ts/latest/guide/forms.html
Le bloc de sélection / option ne permettait pas de modifier la valeur de la sélection en sélectionnant l'une des options.
Faire ce que Mark Rajcok a suggéré a fonctionné, bien que je me demande s'il y a quelque chose que j'ai manqué dans le tutoriel d'origine ou s'il y a eu une mise à jour. Dans tous les cas, l'ajout
à hero-form.component.ts dans la classe HeroFormComponent
et
à hero-form.component.html dans l'
<select>
élément l'a fait fonctionnerla source
utilisez selectionChange en angulaire 6 et plus. exemple
(selectionChange)= onChange($event.value)
la source
Une autre option consiste à stocker l'objet en valeur sous forme de chaîne:
composant:
C'était la seule façon de faire fonctionner la liaison bidirectionnelle pour définir la valeur de sélection au chargement de la page. En effet, ma liste qui remplit la zone de sélection n'était pas exactement le même objet auquel ma sélection était liée et elle doit être le même objet, pas seulement les mêmes valeurs de propriété.
la source
Je l'ai utilisé pour la liste déroulante angulaire du matériau. fonctionne bien
la source
la dernière version ionique 3.2.0 a changé (changer) en (ionChange)
par exemple: HTML
TS
la source
Angulaire 7/8
Depuis angular 6, l'utilisation de la propriété d'entrée ngModel avec la directive sur les formes réactives est obsolète et supprimée dans Angular 7+. Lisez le document officiel ici.
En utilisant l'approche par formulaire réactif, vous pouvez obtenir / définir les données sélectionnées comme;
la source
Dans Angular 5, je l'ai fait de la manière suivante. récupère l'objet $ event.value au lieu de $ event.target.value
la source
Dans Angular 8, vous pouvez simplement utiliser "selectionChange" comme ceci:
la source