Estoy usando Angular 2 (TypeScript).
Quiero hacer algo con la nueva selección, pero lo que obtengo onChange()
es siempre la última selección. ¿Cómo puedo obtener la nueva selección?
<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
fuente
fuente
selectedDevice
cuando el usuario selecciona un elemento diferente, y 2) si establecemos el valor deselectedDevice
, NgModel actualizará automáticamente la vista. Como también queremos recibir notificaciones de un cambio, agregué el(change)
enlace del evento. No deberíamos tener que hacerlo de esta manera ... deberíamos poder dividir el enlace de datos bidireccional[ngModel]="selectedDevice" and (ngModelChange)="onChange($event)"
, pero como descubrí,onChange()
se me llama dos veces por cada cambio de lista de selección de esa manera.<option *ngFor="#course of course_array #i=index" #newone value={{course.id}} >{{course.course_name}}</option>
course.course_name
ycourse.id
ambos, ¿cómo puedo enviar estos dos a través de la función (cambio)?$event
variable / símbolo especial es parte del "contexto de declaración" que tienen las declaraciones de plantilla angular. Si en vez escribí(ngModelChange)="onChange('abc')"
entoncesnewValue
sería obtener la cadenaabc
. Es solo una función normal de JavaScript.Puede volver a pasar el valor al componente creando una variable de referencia en la etiqueta de selección
#device
y pasándola al controlador de cambiosonChange($event, device.value)
debería tener el nuevo valorfuente
ngModel
aquí, estás vinculando a una nueva variable llamadadevice
.[(ngModel)]
aquí¡Solo use [ngValue] en lugar de [value] !!
fuente
(change)="selectOrg(selectedOrg)"
llama a la función selectOrg con la selección actual / anterior, no la opción recién seleccionada. Me di cuenta, ni siquiera necesito el(change)
bit.Me encontré con este problema mientras hacía el tutorial de formularios Angular 2 (versión TypeScript) en https://angular.io/docs/ts/latest/guide/forms.html
El bloque de selección / opción no permitía cambiar el valor de la selección seleccionando una de las opciones.
Hacer lo que sugirió Mark Rajcok funcionó, aunque me pregunto si hay algo que me perdí en el tutorial original o si hubo una actualización. En cualquier caso, agregando
a hero-form.component.ts en la clase HeroFormComponent
y
a hero-form.component.html en el
<select>
elemento lo hizo funcionarfuente
use selectionChange en angular 6 y superior. ejemplo
(selectionChange)= onChange($event.value)
fuente
Otra opción es almacenar el objeto en valor como una cadena:
componente:
Esta fue la única forma en que pude obtener un enlace bidireccional trabajando para establecer el valor de selección en la carga de la página. Esto se debió a que mi lista que llena el cuadro de selección no era exactamente el mismo objeto al que estaba vinculada mi selección y debe ser el mismo objeto, no solo los mismos valores de propiedad.
fuente
Utilicé esto para desplegar material angular. funciona bien
fuente
El último iónico 3.2.0 ha modificado (cambio) a (ionChange)
por ejemplo: HTML
TS
fuente
Angular 7/8
A partir de angular 6, el uso de la propiedad de entrada ngModel con la directiva de formas reactivas se ha desaprobado y eliminado por completo en angular 7+. Lea el documento oficial aquí.
Usando el enfoque de forma reactiva puede obtener / establecer datos seleccionados como;
fuente
En Angular 5 lo hice de la siguiente manera. obtener el objeto $ event.value en lugar de $ event.target.value
fuente
En Angular 8 simplemente puede usar "selectionChange" de esta manera:
fuente