Я работаю с AngularJS в течение последних нескольких недель, и одна вещь, которая меня действительно беспокоит, это то, что даже после попытки всех перестановок или конфигурации, определенной в спецификации на http://docs.angularjs.org/api/ng .directive: select , я все еще получаю пустую опцию в качестве первого дочернего элемента select.
Вот Джейд:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Вот контроллер:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Наконец, вот HTML, который генерируется:
<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>
Что мне нужно сделать, чтобы избавиться от этого?
PS: Вещи работают и без этого, но это выглядит странно, если вы используете select2 без множественного выбора.
null
является одним из ваших значений.<option>
так что тат угловатый сгенерировал что-то вроде<option value="?">Select an option</option>
<option value="">Select an option</option>
является нулевым значением в списке параметров. Нет необходимости в? -Характере.Если вам нужно начальное значение, см. Ответ @ pkozlowski.opensource, какой FYI также можно реализовать в представлении (а не в контроллере) с помощью ng-init:
Если вам не нужно начальное значение, «в элемент может быть вложен один жестко запрограммированный элемент со значением, установленным в пустую строку. Этот элемент будет представлять нулевую или« не выбранную »опцию»:
источник
Угловой <1.4
Для всех, кто рассматривает «null» как допустимое значение для одного из параметров (поэтому представьте, что «null» - это значение одного из элементов в typeOptions в примере ниже), я нашел этот простой способ убедиться, что автоматически добавлено опция скрыта - это использовать ng-if.
Почему нг-если, а не нг-скрыть? Поскольку вы хотите, чтобы селекторы css были нацелены на первый вариант внутри, выберите таргетинг на «реальный» вариант, а не тот, который скрыт. Это становится полезным, когда вы используете транспортир для тестирования e2e и (по любой причине) вы используете by.css () для выбора параметров.
Угловой> = 1.4
Из-за рефакторинга директив select и options использование
ng-if
больше не является жизнеспособным вариантом, поэтому вам нужно обратиться к нему,ng-show="false"
чтобы оно снова заработало.источник
size="5"
в атрибуты selects и видите, что ничего не выбрано! Как в<select>
элементе по умолчанию -элемент! Я не могу понять, почему angular делает такую вещь для селектов безmultiple
атрибута ...Может быть, кому-то пригодится:
Если вы хотите использовать обычные параметры вместо ng-options, вы можете сделать следующее:
Установите модель в линию. Используйте ng-init, чтобы избавиться от пустой опции
источник
Нечто подобное происходило и со мной и было вызвано обновлением до угловой версии 1.5.
ng-init
Кажется, в новых версиях Angular выполняется синтаксический анализ типа . В старшем угловомng-init="myModelName=600"
будет отображаться в качестве опции со значением «600» , то есть ,<option value="600">First</option>
но в угловому 1.5 он не найдет это , как это , кажется, рассчитывая найти вариант со значением 600 т<option value=600>First</option>
. Затем Angular вставит случайный первый элемент:Угловой <1.2.x
Угловой> 1.2
источник
ng-value="600"
вoption
вместоvalue
. Он будет разбирать его на число, и вам не нужно конвертировать ваши значения, как сейчас :)Среди множества ответов здесь я решил опубликовать решение, которое сработало для меня, и выполнить все следующие условия:
value=""
)код
ЦСИ
оригинальные вопросы и ответы - https://stackoverflow.com/a/32880941/1121919
источник
<option ng-selected="true" value="null">
?Быстрое решение:
Надеюсь, это кому-нибудь поможет. В идеале выбранный ответ должен быть подходом, но если в случае, если это невозможно, то должен работать как патч.
источник
Да, ng-модель создаст пустое значение опции, когда свойство ng-модели неопределено. Мы можем избежать этого, если мы назначим объект для ng-модели
пример
угловое кодирование
Важная заметка:
Присвойте объект массива как $ scope.collections [0] или $ scope.collections [1] для ng-модели, не используйте свойства объекта. если вы получаете значение параметра select с сервера, используя функцию обратного вызова, присвойте объект ng-модели
ПРИМЕЧАНИЕ от углового документа
Примечание: ngModel сравнивает по ссылке, а не по значению. Это важно при привязке к массиву объектов. см. пример http://jsfiddle.net/qWzTb/
Я пытался много раз, наконец, я нашел это.
источник
Хотя ответы @ pkozlowski.opensource и @ Mark верны, я хотел бы поделиться своей слегка измененной версией, где я всегда выбираю первый элемент в списке, независимо от его значения:
источник
Я использую Angular 1.4x, и я нашел этот пример, поэтому я использовал ng-init, чтобы установить начальное значение в select:
источник
Я столкнулся с той же проблемой. Если вы публикуете угловую форму с обычной публикацией, то вы столкнетесь с этой проблемой, так как угловая форма не позволяет вам устанавливать значения для параметров, которые вы использовали. Если вы получите значение «form.type», то вы найдете правильное значение. Вы должны разместить угловой объект сам, а не форму сообщения.
источник
Простое решение состоит в том, чтобы установить опцию с пустым значением.
""
Я обнаружил, что это устраняет лишнюю неопределенную опцию.источник
Хорошо, на самом деле ответ очень прост: когда есть опция, не распознаваемая Angular, она включает тусклую. Что вы делаете неправильно, когда вы используете ng-options, он читает объект, скажем
[{ id: 10, name: test }, { id: 11, name: test2 }] right?
Это то, чем должно быть значение вашей модели, чтобы оценить его как равное, скажем, вы хотите, чтобы выбранное значение было равно 10, вам нужно установить для вашей модели значение, подобное
{ id: 10, name: test }
выбору 10, поэтому она НЕ будет создавать этот мусор.Надеюсь, это поможет всем понять, я очень старался :)
источник
Это решение работает для меня:
источник
Это сработало для меня
источник
Это прекрасно работает
способ, которым это работает, состоит в том, что это дает первую опцию, которая будет отображаться перед выбором чего-либо, и
display:none
удаляет ее из выпадающего списка, так что если вы хотите, вы можете сделатьи это даст вам
select and option
перед выбором, но после выбора он исчезнет, и он не будет отображаться в раскрывающемся списке.источник
Попробуйте это в вашем контроллере, в том же порядке:
источник
Вот исправление:
для образца данных, таких как:
Опция выбора должна быть такой:
Суть в том, что когда мы пишем
value.listCount
какvalue.listName
, он автоматически заполняет текст,value.listName
но значение выбранной опции равно,value.listCount
хотя значения мои показывают нормальные 0,1,2 .. и так далее !!!В моем случае,
financeRef.financeLimit
это фактически захват,value.listCount
и я могу динамически манипулировать контроллером.источник
Я хотел бы добавить, что если начальное значение исходит из привязки какого-либо родительского элемента или компонента 1.5, убедитесь, что передан правильный тип. Если используется
@
в связывании, переданная переменная будет строкой, и если параметры, например,. целые числа, тогда появится пустая опция.Либо правильно анализируйте значение в init, либо связывайте с
<
и нет@
(менее рекомендуется для производительности, если в этом нет необходимости).источник
Простое решение
источник
Решение для измельчения с помощью jQuery, когда у вас нет контроля над параметрами
HTML:
ЯШ:
источник
Если вы используете ng-init вашу модель для решения этой проблемы:
источник
у меня была такая же проблема, я (убрал "ng-модель") изменил это:
к этому:
теперь это работает, но в моем случае это было причиной того, что я удалил эту область из ng.controller, проверьте, не делали ли вы то же самое.
источник
Привет, у меня было несколько мобильных ссылок jQUery, и я их удалил. С jQuery mobile у меня не работало ни одно из вышеперечисленных исправлений. (Здорово, если кто-то может объяснить конфликт между jQuery Mobile и Angular JS)
https://guntucomputerhacks.blogspot.com.au/2017/10/angular-js-drop-down-first-options-vs.html
источник
Единственное, что сработало для меня, это использование
track by
вng-options
, вот так:источник
ng-option
получить последнее значение массива , который я хочу , чтобы установленное значениеoption
изselect
. Это не решено :(Обратитесь к примеру из документации angularjs, как преодолеть эти проблемы.
Меня устраивает. Также можете посмотреть, как это работает здесь
источник
Мы можем использовать CSS, чтобы скрыть первый вариант, но он не будет работать в IE 10, 11. Лучший способ - удалить элемент с помощью Jquery. Это решение работает для основных браузеров, протестированных в Chrome и IE10, 11
Также, если вы используете угловой, иногда работает setTimeout
источник