Spec-Zone.ru › Angular.js 1.3

Улучшить эту документацию Просмотреть исходный код select

  1. директива в модуле 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 в этом примере). Для вычисления того, выбран ли элемент, мы делаем следующее:

  1. Примените track by к элементам в массиве. В примере: [1, 2]
  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

Добавляет атрибут required и ограничение валидации required к элементу, когда выражение ngRequired имеет значение true. Используйте ngRequired вместо required, когда вы хотите привязать данные к атрибуту required.

ngOptions
(необязательно)
comprehension_expression

в одном из следующих форматов:

  • для источников данных в виде массивов:
    • label for value in array
    • select as label for value in array
    • label group by group for value in array
    • label group by group for value in array track by trackexpr
    • label for value in array | orderBy:orderexpr track by trackexpr (для включения фильтра с track by)
  • для источников данных в виде объектов:
    • label for (key , value) in object
    • select as label for (key , value) in object
    • label group by group for (key, value) in object
    • select as label group by group for (key, value) in object

Где:

  • array / object: выражение, возвращающее массив / объект для итерации.
  • value: локальная переменная, которая будет ссылаться на каждый элемент в array или на каждое значение свойства object во время итерации.
  • key: локальная переменная, которая будет ссылаться на имя свойства в object во время итерации.
  • label: результат этого выражения будет меткой для элемента <option>. Вероятнее всего, expression будет ссылаться на переменную value (например, value.propertyName).
  • select: результат этого выражения будет привязан к модели родительского элемента <select>. Если не указано, выражение select по умолчанию будет value.
  • group: результат этого выражения будет использоваться для группировки опций с помощью элемента <optgroup> DOM.
  • trackexpr: используется при работе с массивом объектов. Результат этого выражения будет использоваться для идентификации объектов в массиве. trackexpr вероятнее всего будет ссылаться на переменную value (например, value.propertyName). Благодаря этому выбор сохраняется даже при повторном создании опций (например, при перезагрузке с сервера).

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API