Je travaille avec AngularJS depuis quelques semaines, et la seule chose qui me dérange vraiment, c'est que même après avoir essayé toutes les permutations ou la configuration définie dans la spécification à http://docs.angularjs.org/api/ng .directive: select , je reçois toujours une option vide en tant que premier enfant de l'élément select.
Voici le Jade:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Voici le contrôleur:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Enfin, voici le HTML qui est généré:
<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>
Que dois-je faire pour m'en débarrasser?
PS: Les choses fonctionnent également sans cela, mais cela semble étrange si vous utilisez select2 sans sélection multiple.
null
est l'une de vos valeurs.<option>
afin que tat angulaire génère quelque chose comme<option value="?">Select an option</option>
<option value="">Select an option</option>
c'est la valeur null de la liste d'options. Pas besoin de caractère?.Si vous voulez une valeur initiale, voir la réponse de @ pkozlowski.opensource, que FYI peut également être implémenté dans la vue (plutôt que dans le contrôleur) en utilisant ng-init:
Si vous ne voulez pas de valeur initiale, "un seul élément codé en dur, avec la valeur définie sur une chaîne vide, peut être imbriqué dans l'élément. Cet élément représentera alors une option nulle ou" non sélectionnée "":
la source
Angulaire <1,4
Pour tous ceux qui traitent "null" comme une valeur valide pour l'une des options (alors imaginez que "null" est une valeur de l'un des éléments de typeOptions dans l'exemple ci-dessous), j'ai trouvé le moyen le plus simple de vous assurer que automatiquement ajouté L'option est cachée est d'utiliser ng-if.
Pourquoi ng-if et pas ng-hide? Parce que vous voulez que les sélecteurs css qui ciblent la première option à l'intérieur ci-dessus sélectionnent pour cibler l'option "réelle", pas celle qui est cachée. Il devient utile lorsque vous utilisez le rapporteur pour les tests e2e et (pour une raison quelconque) vous utilisez by.css () pour cibler les options de sélection.
Angulaire> = 1,4
En raison de la refactorisation des directives select et options, l'utilisation
ng-if
n'est plus une option viable, vous devez donc vous tournerng-show="false"
pour la faire fonctionner à nouveau.la source
size="5"
les attributs selects et vous pouvez voir qu'il n'y a rien de sélectionné! Comme dans un<select>
-Element par défaut ! Je ne comprends pas pourquoi angular fait une telle chose pour les sélections sansmultiple
attribut ...Peut-être utile pour quelqu'un:
Si vous souhaitez utiliser des options simples au lieu de ng-options, vous pouvez faire comme ci-dessous:
Définissez le modèle en ligne. Utilisez ng-init pour se débarrasser de l'option vide
la source
Quelque chose de similaire m'arrivait aussi et était causé par une mise à niveau vers angular 1.5.
ng-init
semble être analysé pour le type dans les nouvelles versions d'Angular. Dans les versions plus anciennes, Angular mapperaitng-init="myModelName=600"
sur une option avec une valeur "600",<option value="600">First</option>
mais dans Angular 1.5, il ne trouverait pas cela car il semble s'attendre à trouver une option avec une valeur 600 ie<option value=600>First</option>
. Angular insèrerait alors un premier élément aléatoire:Angulaire <1.2.x
Angulaire> 1,2
la source
ng-value="600"
à laoption
place devalue
. Il va l'analyser en un nombre et vous n'avez pas à convertir vos valeurs comme vous le faites maintenant :)Parmi la multitude de réponses ici, je me suis dit que je republierais la solution qui fonctionnait pour moi et remplissait toutes les conditions suivantes:
value=""
)code
src
questions et réponses originales - https://stackoverflow.com/a/32880941/1121919
la source
<option ng-selected="true" value="null">
?Une solution rapide:
J'espère que cela aide quelqu'un. Idéalement, la réponse choisie devrait être l'approche, mais si ce n'est pas possible, elle devrait fonctionner comme un patch.
la source
Oui, ng-model créera une valeur d'option vide, lorsque la propriété ng-model n'est pas définie. Nous pouvons éviter cela, si nous assignons un objet au modèle ng
Exemple
codage angulaire
Note importante:
Assignez un objet du tableau comme $ scope.collections [0] ou $ scope.collections [1] à ng-model, n'utilisez pas les propriétés d'objet. si vous obtenez la valeur de l'option de sélection du serveur, en utilisant la fonction de rappel, affectez l'objet au modèle ng
NOTE du document angulaire
Remarque: ngModel compare par référence, pas par valeur. Ceci est important lors de la liaison à un tableau d'objets. voir un exemple http://jsfiddle.net/qWzTb/
j'ai essayé beaucoup de fois finalement je l'ai trouvé.
la source
Bien que les réponses de @ pkozlowski.opensource et @ Mark soient correctes, je voudrais partager ma version légèrement modifiée où je sélectionne toujours le premier élément de la liste, quelle que soit sa valeur:
la source
J'utilise Angular 1.4x et j'ai trouvé cet exemple, j'ai donc utilisé ng-init pour définir la valeur initiale dans la sélection:
la source
J'ai fait face au même problème. Si vous publiez un formulaire angulaire avec une publication normale, vous serez confronté à ce problème, car angulaire ne vous permet pas de définir des valeurs pour les options de la manière que vous avez utilisée. Si vous obtenez la valeur de "form.type", vous trouverez la bonne valeur. Vous devez publier l'objet angulaire lui-même et non le formulaire.
la source
Une solution simple consiste à définir une option avec une valeur vide
""
J'ai trouvé que cela élimine l'option supplémentaire non définie.la source
Ok, en fait, la réponse est très simple: quand il y a une option non reconnue par Angular, elle en inclut une terne. Ce que vous faites mal, c'est que lorsque vous utilisez ng-options, il lit un objet, par exemple
[{ id: 10, name: test }, { id: 11, name: test2 }] right?
Voici ce que doit être la valeur de votre modèle pour l'évaluer comme égale, disons que vous voulez que la valeur sélectionnée soit 10, vous devez définir votre modèle sur une valeur comme
{ id: 10, name: test }
pour sélectionner 10, donc il ne créera PAS cette corbeille.J'espère que cela aide tout le monde à comprendre, j'ai eu du mal à essayer :)
la source
Cette solution fonctionne pour moi:
la source
Cela a fonctionné pour moi
la source
Cela fonctionne parfaitement bien
la façon dont cela fonctionne est que cela donne la première option à afficher avant de sélectionner quelque chose et le
display:none
supprime du menu déroulant donc si vous voulez, vous pouvez le faireet cela vous donnera la
select and option
avant de sélectionner mais une fois sélectionné, il disparaîtra et ne s'affichera pas dans la liste déroulante.la source
Essayez celui-ci dans votre contrôleur, dans le même ordre:
la source
Voici le correctif:
pour un échantillon de données comme:
L'option de sélection doit être comme ceci: -
Le point étant lorsque nous écrivons en
value.listCount
tant quevalue.listName
, il remplit automatiquement le textevalue.listName
mais la valeur de l'option sélectionnée estvalue.listCount
bien que les valeurs mes soient normales 0,1,2 .. et ainsi de suite !!!Dans mon cas, le
financeRef.financeLimit
saisit en fait levalue.listCount
et je peux faire ma manipulation dans le contrôleur dynamiquement.la source
Je voudrais ajouter que si la valeur initiale provient d'une liaison d'un élément parent ou d'un composant 1.5, assurez-vous que le type approprié est transmis. Si vous utilisez
@
dans la liaison, la variable passée sera une chaîne et si les options sont par exemple. entiers, puis l'option vide apparaîtra.Soit analyser correctement la valeur dans init, soit lier avec
<
et non@
(moins recommandé pour les performances sauf si nécessaire).la source
Solution simple
la source
Une solution de mouture avec jQuery lorsque vous n'avez pas le contrôle des options
html:
js:
la source
Si vous utilisez ng-init votre modèle pour résoudre ce problème:
la source
j'ai eu le même problème, j'ai (supprimé "ng-model") changé ceci:
pour ça:
maintenant ça marche, mais dans mon cas, c'est parce que j'ai supprimé cette portée de ng.controller, vérifiez si vous n'avez pas fait la même chose.
la source
Salut, j'avais quelques références mobiles jQUery et je les ai supprimées. Avec jQuery mobile, aucune des corrections ci-dessus ne fonctionnait pour moi. (C'est génial si quelqu'un peut expliquer le conflit entre jQuery Mobile et Angular JS)
https://guntucomputerhacks.blogspot.com.au/2017/10/angular-js-drop-down-first-options-vs.html
la source
La seule chose qui a fonctionné pour moi est d'utiliser
track by
dansng-options
, comme ceci:la source
ng-option
obtenez la dernière valeur du tableau dont je veux définir la valeuroption
deselect
. Il n'a pas résolu :(Reportez-vous à l'exemple de la documentation angularjs pour résoudre ces problèmes.
Ça marche pour moi. Peut également voir comment cela fonctionne ici
la source
Nous pouvons utiliser CSS pour masquer la première option, mais cela ne fonctionnera pas dans IE 10, 11. La meilleure façon est de supprimer l'élément à l'aide de Jquery. Cette solution fonctionne pour les principaux navigateurs testés dans Chrome et IE10, 11
Aussi, si vous utilisez angulaire, parfois en utilisant setTimeout fonctionne
la source