Estoy tratando de hacer que select-box comience con una opción precargada usando ng-repeat con AngularJS 1.1.5. En cambio, la selección siempre comienza sin nada seleccionado. También tiene una opción vacía, que no quiero. Creo que hay un efecto secundario de no seleccionar nada.
Puedo hacer que esto funcione usando ng-options en lugar de ng-repeat, pero quiero usar ng-repeat para este caso. Aunque mi ejemplo reducido no lo muestra, también quiero establecer el atributo de título de cada opción, y que yo sepa, no hay forma de hacerlo usando ng-options.
No creo que esto esté relacionado con el alcance común de AngularJs / problema de herencia prototípica. Al menos no veo nada obvio al inspeccionar en Batarang. Además, cuando elige una opción en la selección con la interfaz de usuario, el modelo se actualiza correctamente.
Aquí está el HTML:
<body ng-app ng-controller="AppCtrl">
<div>
Operator is: {{filterCondition.operator}}
</div>
<select ng-model="filterCondition.operator">
<option
ng-repeat="operator in operators"
value="{{operator.value}}"
>
{{operator.displayName}}
</option>
</select>
</body>
Y el JavaScript:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
}
JS Fiddle para esto: http://jsfiddle.net/coverbeck/FxM3B/2/
fuente
Respuestas:
OKAY. Si no desea utilizar la forma correcta
ng-options
, puede agregar unng-selected
atributo con una lógica de verificación de condición para que laoption
directiva haga que la preselección funcione.Working Demo
fuente
Para la etiqueta select, angular proporciona la directiva ng-options. Le proporciona el marco específico para configurar opciones y establecer un valor predeterminado. Aquí está el violín actualizado usando ng-options que funciona como se esperaba: http://jsfiddle.net/FxM3B/4/
HTML actualizado (el código permanece igual)
fuente
Gracias a TheSharpieOne por señalar la opción ng-selected. Si eso hubiera sido publicado como una respuesta en lugar de como un comentario, habría hecho que la respuesta correcta.
Aquí hay un JSFiddle que funciona: http://jsfiddle.net/coverbeck/FxM3B/5/ .
También actualicé el violín para usar el atributo de título, que había dejado fuera en mi publicación original, ya que no era la causa del problema (pero es la razón por la que quiero usar ng-repeat en lugar de ng-options) .
HTML:
JS:
fuente
El hecho de que angular esté inyectando un elemento de opción vacío a la selección es que el objeto modelo vinculado a él por defecto viene con un valor vacío cuando se inicializa.
Si desea seleccionar una opción predeterminada, probablemente pueda establecerla en el alcance del controlador
Si quieres un marcador de posición de opción vacío, esto funciona para mí
fuente
Como se sugirió, debe usar ng-options y, desafortunadamente, creo que necesita hacer referencia al elemento de matriz para un valor predeterminado (a menos que la matriz sea una matriz de cadenas).
http://jsfiddle.net/FxM3B/3/
El JavaScript:
El HTML:
fuente
Si está utilizando md-select y ng-repeat ing md-option de material angular, puede agregar
ng-model-options="{trackBy: '$value.id'}"
a la etiqueta md-select ceniza que se muestra en este bolígrafoCódigo:
fuente