He estado trabajando con AngularJS durante las últimas semanas, y lo único que realmente me molesta es que incluso después de probar todas las permutaciones o la configuración definida en la especificación en http://docs.angularjs.org/api/ng .directive: select , sigo teniendo una opción vacía como primer elemento secundario del elemento select.
Aquí está el jade:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Aquí el controlador:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Finalmente, aquí está el HTML que se genera:
<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
<option value="?" selected="selected"></option>
<option value="0">Feature</option>
<option value="1">Bug</option>
<option value="2">Enhancement</option>
</select>
¿Qué necesito hacer para deshacerme de él?
PD: Las cosas funcionan sin esto también, pero parece extraño si usas select2 sin selección múltiple.
null
es uno de sus valores.<option>
para que angular genere algo así<option value="?">Select an option</option>
<option value="">Select an option</option>
es el valor nulo de la lista de opciones. No hay necesidad de caracteres?Si desea un valor inicial, consulte la respuesta de @ pkozlowski.opensource, que para su información también se puede implementar en la vista (en lugar de en el controlador) usando ng-init:
Si no desea un valor inicial, "un solo elemento codificado, con el valor establecido en una cadena vacía, puede anidarse en el elemento. Este elemento representará una opción nula o" no seleccionada ":
fuente
Angular <1.4
Para cualquiera que trate "nulo" como un valor válido para una de las opciones (así que imagine que "nulo" es un valor de uno de los elementos en typeOptions en el ejemplo a continuación), encontré esa forma más simple de asegurarme de que se agregue automáticamente La opción oculta es usar ng-if.
¿Por qué ng-if y no ng-hide? Debido a que desea que los selectores CSS que apunten a la primera opción dentro de arriba, seleccione la opción "real", no la que está oculta. Se vuelve útil cuando usa transportador para pruebas e2e y (por cualquier razón) usa by.css () para seleccionar opciones de selección.
Angular> = 1.4
Debido a la refactorización de las directivas select y options, el uso
ng-if
ya no es una opción viable, por lo que debe recurrir para que vuelva ang-show="false"
funcionar.fuente
size="5"
Pones los atributos seleccionados y puedes ver que no hay nada seleccionado! Como en un elemento predeterminado<select>
! No puedo entender por qué angular está haciendo tal cosa para selecciones sinmultiple
atributo ...Quizás útil para alguien:
Si desea utilizar opciones simples en lugar de ng-options, puede hacer lo siguiente:
Establecer el modelo en línea. Use ng-init para deshacerse de la opción vacía
fuente
Algo similar me estaba sucediendo a mí también y fue causado por una actualización a angular 1.5.
ng-init
parece estar siendo analizado por tipo en versiones más nuevas de Angular. En Angular anterior, se asignaríang-init="myModelName=600"
a una opción con el valor "600", es decir,<option value="600">First</option>
pero en Angular 1.5 no encontrará esto, ya que parece esperar encontrar una opción con el valor 600, es decir<option value=600>First</option>
. Angular luego insertaría un primer elemento aleatorio:Angular <1.2.x
Angular> 1.2
fuente
ng-value="600"
enoption
lugar devalue
. Lo analizará a un número y no tiene que convertir sus valores como lo hace ahora :)Entre la multitud de respuestas aquí, pensé que volvería a publicar la solución que funcionó para mí y cumplí con todas las siguientes condiciones:
value=""
)código
src
Preguntas y respuestas originales: https://stackoverflow.com/a/32880941/1121919
fuente
<option ng-selected="true" value="null">
?Una solución rápida:
Espero que ayude a alguien. Idealmente, la respuesta seleccionada debería ser el enfoque, pero si eso no es posible, entonces debería funcionar como un parche.
fuente
Sí, ng-model creará un valor de opción vacío, cuando la propiedad ng-model no está definida. Podemos evitar esto si asignamos un objeto a ng-model
Ejemplo
codificación angular
Nota IMPORTANTE:
Asigne el objeto de la matriz como $ scope.collections [0] o $ scope.collections [1] a ng-model, no use las propiedades del objeto. si obtiene el valor de opción de selección del servidor, utilizando la función de devolución de llamada, asigne un objeto a ng-model
NOTA del documento angular
Nota: ngModel compara por referencia, no por valor. Esto es importante cuando se vincula a una matriz de objetos. ver un ejemplo http://jsfiddle.net/qWzTb/
Lo he intentado muchas veces, finalmente lo encontré.
fuente
Aunque las respuestas de @ pkozlowski.opensource y @ Mark son correctas, me gustaría compartir mi versión ligeramente modificada donde siempre selecciono el primer elemento de la lista, independientemente de su valor:
fuente
Estoy usando Angular 1.4x y encontré este ejemplo, así que usé ng-init para establecer el valor inicial en la selección:
fuente
Me enfrenté al mismo problema. Si está publicando una forma angular con publicación normal, entonces se enfrentará a este problema, ya que angular no le permite establecer valores para las opciones en la forma en que lo ha utilizado. Si obtiene el valor de "form.type", encontrará el valor correcto. Debe publicar el objeto angular en sí mismo, no el formulario de publicación.
fuente
Una solución simple es establecer una opción con un valor en blanco
""
. Encontré que esto elimina la opción indefinida adicional.fuente
Ok, en realidad la respuesta es muy simple: cuando hay una opción no reconocida por Angular, incluye una aburrida. Lo que estás haciendo mal es que, cuando usas ng-options, lee un objeto, por ejemplo
[{ id: 10, name: test }, { id: 11, name: test2 }] right?
Esto es lo que debe ser el valor de su modelo para evaluarlo como igual, digamos que desea que el valor seleccionado sea 10, debe establecer su modelo en un valor como
{ id: 10, name: test }
para seleccionar 10, por lo tanto, NO creará esa basura.Espero que ayude a todos a entender, me costó mucho intentarlo :)
fuente
Esta solución me funciona:
fuente
Esto funciono para mi
fuente
Esto funciona perfectamente bien
la forma en que funciona es que esto le da la primera opción que se mostrará antes de seleccionar algo y lo
display:none
elimina del menú desplegable, por lo que si lo desea, puede hacerloy esto le dará
select and option
antes de seleccionar, pero una vez seleccionado, desaparecerá y no aparecerá en el menú desplegable.fuente
Pruebe este en su controlador, en el mismo orden:
fuente
Aquí está la solución:
para una muestra de datos como:
La opción de selección debería ser así:
El punto es que cuando escribimos
value.listCount
comovalue.listName
, automáticamente rellena el texto,value.listName
pero el valor de la opción seleccionada es,value.listCount
aunque los valores pueden mostrar normal 0,1,2 ... ¡¡¡y así sucesivamente !!!En mi caso, el
financeRef.financeLimit
realmente está agarrando elvalue.listCount
y puedo hacer mi manipulación en el controlador de forma dinámica.fuente
Me gustaría agregar que si el valor inicial proviene de un enlace de algún elemento padre o componente 1.5, asegúrese de que se pase el tipo correcto. Si se usa
@
en enlace, la variable pasada será string y si las opciones son, por ejemplo. enteros, entonces aparecerá la opción vacía.Analice correctamente el valor en init, o enlace con
<
y no@
(menos recomendado para el rendimiento a menos que sea necesario).fuente
Solución simple
fuente
Una solución de rutina con jQuery cuando no tienes el control de las opciones
html:
js:
fuente
Si usa ng-init su modelo para resolver este problema:
fuente
tuve el mismo problema, yo (eliminé "ng-model") cambié esto:
a esto:
ahora funciona, pero en mi caso fue porque eliminé ese alcance de ng.controller, verifique si no hizo lo mismo.
fuente
Hola, tenía algunas referencias móviles de jQUery y las eliminé. Con jQuery mobile, ninguna de las soluciones anteriores funcionó para mí. (Es genial si alguien puede explicar el conflicto entre jQuery Mobile y Angular JS)
https://guntucomputerhacks.blogspot.com.au/2017/10/angular-js-drop-down-first-options-vs.html
fuente
Lo único que funcionó para mí es usarlo
track by
deng-options
esta manera:fuente
ng-option
obtengo el último valor de la matriz que quiero establecer el valoroption
deselect
. No se resolvió :(Consulte el ejemplo de la documentación de angularjs sobre cómo superar estos problemas.
Esto funciona para mi. También puede ver cómo funciona aquí
fuente
Podemos usar CSS para ocultar la primera opción, pero no funcionará en IE 10, 11. La mejor manera es eliminar el elemento usando Jquery. Esta solución funciona para los principales navegadores probados en Chrome e IE10, 11
Además, si está usando angular, a veces usar setTimeout funciona
fuente