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
selectedWorkoutusa[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
selectedWorkoutsea 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
compareFnse usa para determinar si deben considerarse iguales (por ejemplo, si laidpropiedad es la misma.fuente
[value]lugar de[ngValue]o tu código de alguna manera hace que el valor se convierta en una cadena.c1ec2indican encompareFn? Y también, ¿cómo funciona la evaluación en el cuerpo funcional?selectedCountriesycountrysimplemente 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
Controlvalor 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
selectelemento tenga unnameatributo ynamesea ú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
namecampo dentro de laselectetiqueta.Todo lo que necesita hacer es agregar
valuea laoptionetiqueta.selectedWorkoutel 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.selectedtestSubmitResultViewse establece con un valor predeterminado en función de las condiciones y una variabletestSubmitResultViewdebe 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