Я читал об этом в других сообщениях, но я не мог понять это.
У меня есть массив,
$scope.items = [
{ID: '000001', Title: 'Chicago'},
{ID: '000002', Title: 'New York'},
{ID: '000003', Title: 'Washington'},
];
Я хочу сделать это как:
<select>
<option value="000001">Chicago</option>
<option value="000002">New York</option>
<option value="000003">Washington</option>
</select>
А также я хочу выбрать опцию с ID = 000002.
Я прочитал выбор и попытался, но я не могу понять это.
javascript
angularjs
html-select
ng-options
Андрей Каурин
источник
источник
Ответы:
Стоит отметить, что ngModel требуется для работы ngOptions ... обратите внимание на то,
ng-model="blah"
что говорится "установите $ scope.blah в выбранное значение".Попробуй это:
Вот еще из документации AngularJS (если вы ее еще не видели):
Для пояснения значений тегов опций в AngularJS:
При использовании
ng-options
, значение опций тегов выписало нг-вариантами всегда будет индексом элемента массива дополнительный тег относится к . Это связано с тем, что AngularJS фактически позволяет вам выбирать целые объекты с элементами управления select, а не только примитивные типы. Например:Вышеизложенное позволит вам выделить весь объект
$scope.selectedItem
напрямую. Дело в том, что с AngularJS вам не нужно беспокоиться о том, что находится в вашем теге option. Пусть AngularJS справится с этим; Вы должны заботиться только о том, что находится в вашей модели в вашем объеме.Вот плункер, демонстрирующий поведение выше и показывающий выписанный HTML
Работа с опцией по умолчанию:
Есть несколько вещей, которые я не упомянул выше, касающихся опции по умолчанию.
Выбор первого варианта и удаление пустого параметра:
Вы можете сделать это, добавив простое,
ng-init
которое устанавливает модель (fromng-model
) для первого элемента в элементах, которые вы повторяетеng-options
:Примечание: это может стать немного сумасшедшим, если
foo
случится, что он правильно инициализирован для чего-то «ложного». В этом случае выfoo
, скорее всего, захотите обработать инициализацию в вашем контроллере.Настройка опции по умолчанию:
Это немного по-другому; здесь все, что вам нужно сделать, это добавить тег option как дочерний элемент вашего выбора с пустым атрибутом value, а затем настроить его внутренний текст:
Примечание. В этом случае «пустая» опция останется там даже после выбора другой опции. Это не относится к поведению по умолчанию выбора в AngularJS.
Настраиваемая опция по умолчанию, которая скрывается после выбора:
Если вы хотите, чтобы настроенная опция по умолчанию исчезла после выбора значения, вы можете добавить атрибут ng-hide к опции по умолчанию:
источник
<option value="?" selected="selected"></option>
)?ng-if="foo"
мне пришлось использовать,ng-if=!foo
чтобы скрыть пустую опцию по умолчанию, когда выбрана другая опция. Кроме того, пустая опция по умолчанию появляется всегда внизу списка. Как я могу поставить его в начале списка?Я изучаю AngularJS и тоже боролся с отбором. Я знаю, что на этот вопрос уже дан ответ, но я все же хотел поделиться еще одним кодом.
В моем тесте у меня есть два списка: марки автомобилей и модели автомобилей. Список моделей отключен, пока не будет выбрана какая-либо марка. Если выбор в списке марок позднее сбрасывается (устанавливается «Выбрать марку»), тогда список моделей снова отключается и его выбор также сбрасывается (на «Выбор модели»). Марки извлекаются как ресурс, а модели просто жестко запрограммированы.
Делает JSON:
services.js:
HTML-файл:
controllers.js:
источник
ng-model
должен указывать на другую переменную в вашей области, не связанную сmake
. Смотрите пример в docs.angularjs.org/api/ng/directive/ngOptionsПочему-то AngularJS позволяет мне запутаться. Их документация довольно ужасна по этому поводу. Более хорошие примеры вариаций будут приветствоваться.
Во всяком случае, у меня есть небольшое отклонение от ответа Бена Леша.
Мои коллекции данных выглядят так:
Сейчас же
по-прежнему приводит к тому, что значение опций будет индексом (0, 1, 2 и т. д.).
Добавление трека исправлено для меня:
Я считаю, что чаще всего вы хотите добавить массив объектов в список выбора, поэтому я запомню этот!
Имейте в виду, что из AngularJS 1.4 вы больше не можете использовать ng-options, но вам нужно использовать
ng-repeat
тег вашего option:источник
option
?На этот вопрос уже дан ответ (кстати, действительно хороший и исчерпывающий ответ, предоставленный Беном), но я хотел бы добавить еще один элемент для полноты, который также может быть очень удобным.
В примере, предложенном Беном:
была использована следующая форма ngOptions :
select as label for value in array
.Метка - это выражение, результатом которого будет метка для
<option>
элемента. В этом случае вы можете выполнить определенные конкатенации строк, чтобы иметь более сложные метки опций.Примеры:
ng-options="item.ID as item.Title + ' - ' + item.ID for item in items"
дает вам ярлыки, какTitle - ID
ng-options="item.ID as item.Title + ' (' + item.Title.length + ')' for item in items"
дает вам метки, напримерTitle (X)
, гдеX
длина строки заголовка.Вы также можете использовать фильтры, например,
ng-options="item.ID as item.Title + ' (' + (item.Title | uppercase) + ')' for item in items"
выдает метки вродеTitle (TITLE)
, где значение Title свойства Title и TITLE - это то же значение, но преобразуется в заглавные буквы.ng-options="item.ID as item.Title + ' (' + (item.SomeDate | date) + ')' for item in items"
дает вам ярлыки, какTitle (27 Sep 2015)
, если у вашей модели есть свойствоSomeDate
источник
В CoffeeScript:
источник
radix
заparseInt
: http://davidwalsh.name/parseint-radixЕсли вам нужен пользовательский заголовок для каждого параметра,
ng-options
это не применимо. Вместо этого используйтеng-repeat
с параметрами:источник
Я надеюсь, что следующее будет работать для вас.
источник
Это может быть полезно. Привязки не всегда работают.
Например, вы заполняете исходную модель списка опций из службы REST. Выбранное значение было известно до заполнения списка, и оно было установлено. После выполнения запроса REST с помощью $ http, опция list будет выполнена.
Но выбранная опция не установлена. По неизвестным причинам AngularJS в теневом $ digest при выполнении не привязывает выбранный, как должно быть. Я должен использовать JQuery, чтобы установить выбранное. Это важно! AngularJS в тени добавляет префикс к значению атрибута "значение" для сгенерированных опциями ng-repeat. Для int это "номер:".
источник