Spec-Zone.ru › Angular.js 1.6

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

  1. Директива в модуле ng

Обзор

Эта директива позволяет вам изменить поведение директив ngModel в вашем приложении. Вы можете указать директиву ngModelOptions на любом элементе. Все директивы ngModel будут использовать опции ближайшего предка ngModelOptions.

Настройки ngModelOptions находятся путём вычисления значения атрибута директивы как выражения AngularJS. Это выражение должно вычисляться в объект, свойства которого содержат настройки. Например: <div ng-model-options="{ debounce: 100 }".

Наследование опций

Вы можете указать, что настройка ngModelOptions должна наследоваться от родительской директивы ngModelOptions, присвоив ей значение "$inherit". Тогда она унаследует эту настройку от первой директивы ngModelOptions найденной при обходе дерева DOM. Если нет предка содержащего директиву ngModelOptions, будут использованы значения по умолчанию.

Например, учитывая следующий фрагмент HTML

<div ng-model-options="{ allowInvalid: true, debounce: 200 }">
  <form ng-model-options="{ updateOn: 'blur', allowInvalid: '$inherit' }">
    <input ng-model-options="{ updateOn: 'default', allowInvalid: '$inherit' }" />
  </form>
</div>

элемент input будет иметь следующие настройки

{ allowInvalid: true, updateOn: 'default', debounce: 0 }

Обратите внимание, что настройка debounce не унаследована и использовано значение по умолчанию.

Вы можете указать, что все неопределённые настройки автоматически наследуются от предка, включив свойство с ключом "*" и значением "$inherit".

Например, учитывая следующий фрагмент HTML

<div ng-model-options="{ allowInvalid: true, debounce: 200 }">
  <form ng-model-options="{ updateOn: 'blur', "*": '$inherit' }">
    <input ng-model-options="{ updateOn: 'default', "*": '$inherit' }" />
  </form>
</div>

элемент input будет иметь следующие настройки

{ allowInvalid: true, updateOn: 'default', debounce: 200 }

Обратите внимание, что настройка debounce теперь наследует значение из внешнего элемента <div>.

Если вы создаёте компонент повторного использования, будьте осторожны при использовании "*": "$inherit", так как вы можете непреднамеренно унаследовать настройку в будущем, которая изменит поведение вашего компонента.

Вызов и отложенное обновление модели

Свойства updateOn и debounce позволяют указать настраиваемый список событий, которые будут вызывать обновление модели и/или задержку отложенного вызова, так что фактическое обновление произойдёт только после истечения таймера; этот таймер будет сброшен после следующего изменения.

Учитывая природу ngModelOptions, значение, отображаемое внутри полей ввода в представлении, может отличаться от значения в фактической модели. Это означает, что если вы обновите модель, вам также необходимо вызвать ngModel.NgModelController в соответствующем поле ввода, чтобы убедиться, что оно синхронизировано с моделью и что любая отложенная акция отменена.

Самый простой способ обратиться к методу ngModel.NgModelController управления — убедиться, что поле ввода находится внутри формы, которая имеет атрибут name. Это важно, потому что контроллеры form публикуются в соответствующем контексте под именем в их атрибуте name.

Любые ожидающие изменения произойдут немедленно при отправке охватывающей формы через событие submit. Обратите внимание, что события ngClick произойдут до обновления модели. Используйте ngSubmit для доступа к обновлённой модели.

Переопределение немедленных обновлений

Следующий пример демонстрирует, как переопределить немедленные обновления. Изменения в полях ввода внутри формы обновят модель только тогда, когда управление потеряет фокус (событие blur). Если нажата клавиша escape при фокусировке поля ввода, значение сбрасывается до значения в текущей модели.

Отложенное обновление

Следующий пример демонстрирует, как выполнить отложенное обновление модели. Модель будет обновлена только через 1 секунду после последнего изменения. Если нажата кнопка Clear , любая отложенная акция отменяется, и значение становится пустым.

Обновления модели и валидация

По умолчанию в ngModel значение модели устанавливается в undefined , когда валидация определяет, что значение некорректно. Установив свойство allowInvalid в true, модель всё равно будет обновлена, даже если значение некорректно.

Подключение к контексту

Установив свойство getterSetter в true, вы сообщаете ngModel, что выражение ngModel в контексте относится к функции «получить/установить», а не к самому значению.

Следующий пример демонстрирует привязку к функциям получения/установки:

Указание часовых поясов

Вы можете указать часовой пояс, который ожидают директивы ввода даты/времени, указав его имя в свойстве timezone.

Программное изменение опций

Выражение ngModelOptions вычисляется только один раз при привязке директивы; оно не отслеживается на изменения. Однако можно переопределить опции на единственном экземпляре ngModel.NgModelController с помощью NgModelController#$overrideModelOptions().

Информация о директиве

  • Эта директива выполняется на уровне приоритета 10.

Использование

  • в качестве атрибута:
    <ANY
      ng-model-options="Object">
    ...
    </ANY>

Аргументы

Параметр Тип Подробности
ngModelOptions Object

опции для применения к директивам ngModel на этом элементе и его потомках. Допустимые ключи:

  • updateOn: строка, определяющая, к какому событию должен быть привязан ввод. Вы можете задать несколько событий, используя список, разделенный пробелом. Существует специальное событие, называемое default , которое соответствует событиям по умолчанию, относящимся к управлению. Это события, привязанные к элементу управления, и при их срабатывании, обновляют $viewValue через $setViewValue.

    ngModelOptions рассматривает каждое событие, которое не указано в updateOn как «стандартное», так как различные типы элементов управления используют разные стандартные события.

    См. также раздел Вызов и отложенное обновление модели.

  • debounce: целочисленное значение, содержащее значение отложенного обновления модели в миллисекундах. Значение 0 вызывает немедленное обновление. Если вместо него передаётся объект, вы можете указать индивидуальное значение для каждого события. Например:

    ng-model-options="{
      updateOn: 'default blur click',
      debounce: { 'default': 500, 'blur': 0 }
    }"
    

    «default» также применяется ко всем событиям, которые перечислены в updateOn но не перечислены в debounce , т.е. «click» также будет подвержен задержке на 500 миллисекунд.

  • allowInvalid: логическое значение, указывающее, что модель может быть установлена со значениями, которые не прошли проверку вместо стандартного поведения установки модели в undefined.

  • getterSetter: логическое значение, определяющее, следует ли рассматривать функции, привязанные к ngModel как функции получения/установки.
  • timezone: Определяет часовой пояс, используемый для чтения/записи экземпляра Date в модели для <input type="date" />, <input type="time" />, ... . Он понимает UTC/GMT и сокращения часовых поясов США, но для общего использования используйте смещение часового пояса, например, '+0430' (4 часа, 30 минут восточнее гринвичского меридиана). Если не указано, используется часовой пояс браузера.

© 2010–2018 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.6.9/docs/api/ng/directive/ngModelOptions

Spec-Zone.ru

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