En Angular 1, podría seleccionar la opción predeterminada para un cuadro desplegable usando lo siguiente:
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
En Angular 2 tengo:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
¿Cómo podría seleccionar una opción predeterminada dado que los datos de mi opción son:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
y mi valor predeterminado es back
?
[(ngModel)]
enlace, por lo tanto, escucha el[selected]
enlace en el plnkr y no en el código del OP (vea mi respuesta para obtener un enlace a un plnr bifurcado que explica este efecto)selected="workout.name == 'back'"
reactivos:[selected]=workout.name == 'back'
"
. Usé su código con otra variable como esta[selected]="workout.name == exercise.name"
Si asigna el valor predeterminado ay
selectedWorkout
usa[ngValue]
(que permite usar objetos como valor; de lo contrario, solo se admiten cadenas), entonces debería hacer lo que quiera:Asegúrese de que el valor que asigna
selectedWorkout
sea la misma instancia que la utilizada enworkouts
. No se reconocerá otra instancia de objeto, incluso con las mismas propiedades y valores. Solo se comprueba la identidad del objeto.actualizar
Soporte agregado angular para
compareWith
, que hace que sea más fácil establecer el valor predeterminado cuando[ngValue]
se usa (para valores de objeto)De los documentos https://angular.io/api/forms/SelectControlValueAccessor
De esta manera, se puede establecer una instancia de objeto diferente (nueva) como valor predeterminado y
compareFn
se usa para determinar si deben considerarse iguales (por ejemplo, si laid
propiedad es la misma.fuente
[value]
lugar de[ngValue]
o tu código de alguna manera hace que el valor se convierta en una cadena.c1
ec2
indican encompareFn
? Y también, ¿cómo funciona la evaluación en el cuerpo funcional?selectedCountries
ycountry
simplemente establezca el valor del modelo en el valor predeterminado que desea así:
Creé una bifurcación de plnkr de @Douglas aquí para demostrar las diversas formas de obtener el comportamiento deseado en angular2.
fuente
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
Agregue este código en la posición o de la lista de selección.
<option [ngValue]="undefined" selected>Select</option>
fuente
Puedes acercarte de esta manera:
o de esta manera:
o puede establecer el valor predeterminado de esta manera:
o
fuente
Utilice el índice para mostrar el primer valor como predeterminado
fuente
Según https://angular.io/api/forms/SelectControlValueAccessor , solo necesita lo siguiente:
theView.html:
theComponent.ts
fuente
Luché un poco con este, pero terminé con la siguiente solución ... tal vez ayude a alguien.
Plantilla HTML:
Componente:
fuente
Completamente desarrollando otras publicaciones, esto es lo que funciona en el inicio rápido de Angular2,
Para establecer el DOM predeterminado: junto con
*ngFor
, use una declaración condicional en el atributo<option>
'sselected
.Para configurar el
Control
valor predeterminado de: use su argumento de constructor. De lo contrario, antes de un cambio cuando el usuario vuelve a seleccionar una opción, que establece el valor del control con el atributo de valor de la opción seleccionada, el valor del control será nulo.guión:
margen:
fuente
Puedes usar eso en
[ngModel]
lugar de[(ngModel)]
y está bienfuente
Puede hacer lo anterior:
En el código anterior, como puede ver, el atributo seleccionado de la opción de repetición se establece al verificar el índice del bucle de repetición de la lista. [attr. <nombre de atributo html>] se utiliza para configurar el atributo html en angular2.
Otro enfoque será establecer el valor del modelo en el archivo mecanografiado como:
fuente
Agregue a la respuesta de @Matthijs, asegúrese de que su
select
elemento tenga unname
atributo yname
sea único en su plantilla html. Angular 2 está usando el nombre de entrada para actualizar los cambios. Por lo tanto, si hay nombres duplicados o no hay un nombre adjunto al elemento de entrada, el enlace fallará.fuente
Agregue la propiedad de enlace seleccionada, pero asegúrese de que sea nula, para otros campos, por ejemplo:
Ahora funcionará
fuente
Si está utilizando un formulario, debe haber un
name
campo dentro de laselect
etiqueta.Todo lo que necesita hacer es agregar
value
a laoption
etiqueta.selectedWorkout
el valor debe ser "back", y listo.fuente
Si no desea el enlace bidireccional a través de [(ngModel)], haga esto:
¡Acabo de probar mi proyecto en Angular 4 y funciona! El accountsList es una matriz de objetos Account en el que name es una propiedad de Account.
Observación interesante:
[ngValue] = "acct" ejerce el mismo resultado que [ngValue] = "acct.name".
¡No sé cómo lo logra Angular 4!
fuente
fuente
Para mí, defino algunas propiedades:
Luego en el constructor y ngOnInit
Y en la plantilla agrego esto como la primera opción dentro del elemento de selección
Si permite seleccionar la primera opción, simplemente puede eliminar el uso de la propiedad disabledFirstOption
fuente
En mi caso, aquí
this.selectedtestSubmitResultView
se establece con un valor predeterminado en función de las condiciones y una variabletestSubmitResultView
debe ser una y la misma quetestSubmitResultView
. Esto de hecho funcionó para míPara más información,
fuente
Me enfrenté a este problema antes y lo solucioné con una solución alternativa simple
Para su Component.html
Luego, en su component.ts puede detectar la opción seleccionada por
fuente
funciona muy bien como se ve a continuación:
fuente
Solo necesita poner el ngModel y el valor que desea seleccionar:
fuente