Улучшить эту документацию Просмотреть исходный код select
- директива в модуле ng
HTML SELECT элемент с привязкой данных Angular.
ngOptions
Атрибут ngOptions может использоваться для динамического генерации списка элементов <option> для элемента <select> с использованием массива или объекта, полученного путём оценки выражения ngOptions.
Во многих случаях, ngRepeat может использоваться с элементами <option> вместо ngOptions, для достижения аналогичного результата. Тем не менее, ngOptions предоставляет некоторые преимущества, такие как сокращение памяти и увеличение скорости, за счёт того, что не создаёт новый контекст для каждого повторяющегося элемента, а также предоставляет большую гибкость в том, как модель <select> назначается через select as часть выражения. ngOptions следует использовать, когда модель <select> должна быть привязана к значению, отличном от строки. Это связано с тем, что элемент option в настоящее время может быть привязан только к строковым значениям.
При выборе элемента в меню <select>, элемент массива или свойство объекта, представленные выбранным option, будут привязаны к модели, определённой директивой ngModel.
Необязательно, одиночный жёстко заданный элемент <option>, со значением, установленным в пустую строку, может быть вложен в элемент <select>. Этот элемент затем будет представлять null или вариант "не выбран". Обратитесь к примеру ниже для демонстрации.
ngModel сравнивает по ссылке, а не по значению. Это важно при привязке к массиву объектов. Смотрите пример в этом jsfiddle. select as
Использование select as привяжет результат выражения select к модели, но значение элементов <select> и <option> html будет либо индексом (для массивов данных), либо именем свойства (для объектов данных) значения в коллекции. Если используется выражение track by, результат этого выражения будет установлен в качестве значения элементов option и select.
select as и track by
select as и track by в одном выражении. Они не предназначены для совместной работы.Рассмотрим следующий пример:
<select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
$scope.values = [{
id: 1,
label: 'aLabel',
subItem: { name: 'aSubItem' }
}, {
id: 2,
label: 'bLabel',
subItem: { name: 'bSubItem' }
}];
$scope.selected = { name: 'aSubItem' };
В целях сохранения выбора, выражение track by всегда применяется к элементу источника данных (к item в этом примере). Для вычисления того, выбран ли элемент, мы делаем следующее:
- Примените
track byк элементам в массиве. В примере:[1, 2] - Примените
track byк уже выбранному значению вngModel. В примере: это невозможно, так какtrack byотносится кitem.id, но выбранное значение изngModelравно{name: 'aSubItem'}, поэтому выражениеtrack byприменяется к неправильному объекту, выбранный элемент не может быть найден,<select>всегда сбрасывается на опцию "не выбрано".
Сведения о директиве
- Эта директива выполняется на уровне приоритета 0.
Использование
- как элемент:
<select ng-model="" [name=""] [required=""] [ng-required=""] [ng-options=""]> ... </select>
Аргументы
| Параметр | Тип | Подробности |
|---|---|---|
| ngModel | string | Присваиваемое выражение Angular для привязки данных. |
| name (необязательно) | string | Имя свойства формы, в котором публикуется элемент управления. |
| required (необязательно) | string | Элемент управления считается допустимым только если значение введено. |
| ngRequired (необязательно) | string | Добавляет атрибут |
| ngOptions (необязательно) | comprehension_expression | в одном из следующих форматов:
Где:
|
© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.3.20/docs/api/ng/directive/select