Spec-Zone.ru › Angular.js 1.8

Улучшить эту документацию Просмотреть исходный код 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, любая отложенная обработка отменяется, а значение становится пустым.

События по умолчанию, дополнительные триггеры и значения отложенной обработки по умолчанию

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

default события — это те, которые привязаны к элементу управления, и при их срабатывании обновляется $viewValue через $setViewValue. Любое событие, не перечисленное в updateOn, считается событием «по умолчанию», так как у разных типов элементов управления разные события по умолчанию.

Элемент управления в этом примере обновляется по умолчанию, «клик» и «потеря фокуса», с разными значениями debounce. Вы можете видеть, что у «клик» нет индивидуального значения debounce — поэтому оно использует значение отложенной обработки *.

Также есть кнопка, которая прямо вызывает $setViewValue с событием «custom». Поскольку «custom» не определено в списке updateOn , оно считается событием «по умолчанию» и обновит элемент управления, если «по умолчанию» определено в updateOn, и получит значение отложенной обработки «по умолчанию». Обратите внимание, что это лишь иллюстрирует, как пользовательские элементы управления могут потенциально вызывать $setViewValue.

Вы можете изменить настройки updateOn и debounce для проверки различных сценариев. Это делается с помощью $overrideModelOptions.

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

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

Подключение к области видимости

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

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

Программное изменение параметров

Выражение ngModelOptions вычисляется только один раз при привязке директивы; оно не отслеживается на изменения. Тем не менее, можно переопределить параметры для отдельного экземпляра ngModel.NgModelController с помощью NgModelController#$overrideModelOptions(). См. также пример для События по умолчанию, дополнительные триггеры и значения отложенной обработки по умолчанию.

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

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

Форматирование значения времени и datetime-local

С помощью параметров timeSecondsFormat и timeStripZeroSeconds можно настроить отображаемое в элементе управления значение. Обратите внимание, что браузеры могут применять собственное форматирование в пользовательском интерфейсе.

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

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

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

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

Аргументы

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

опции для применения к директивам ngModel на этом элементе и его потомках.

Общие опции:

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

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

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

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

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

    Вы можете использовать ключ * для задания значения отложенного обновления, которое применяется ко всем событиям, которые не указаны конкретно. В следующем примере mouseup будет иметь задержку отложенного обновления в 1000 миллисекунд:

    ng-model-options="{
      updateOn: 'default blur mouseup',
      debounce: { 'default': 500, 'blur': 0, '*': 1000 }
    }"
    
  • allowInvalid: логическое значение, указывающее, что модель можно установить значениями, которые не прошли проверку, вместо стандартного поведения установки модели в значение undefined.
  • getterSetter: логическое значение, определяющее, следует ли рассматривать функции, привязанные к ngModel , как геттеры/сеттеры.

Опции, специфичные для типа ввода:

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

  • timeSecondsFormat: Определяет, должны ли типы time и datetime-local показывать секунды и миллисекунды. Опция следует за форматом строки фильтра date. По умолчанию значение undefined , что равно 'ss.sss' (секунды и миллисекунды). Другие варианты - 'ss' (удаляет миллисекунды) и '' (пустая строка), которые удаляют и секунды, и миллисекунды. Обратите внимание, что браузеры, поддерживающие time и datetime-local , требуют часть времени со часами и минутами в строке, и могут отображать значение иначе в пользовательском интерфейсе. См. пример.

  • timeStripZeroSeconds: Определяет, должны ли типы time и datetime-local удалять секунды и миллисекунды из отформатированного значения, если они равны нулю. Эта опция применяется после timeSecondsFormat. Эта опция может быть использована для обеспечения согласованности форматирования в разных браузерах, так как некоторые браузеры с поддержкой time будут по умолчанию скрывать миллисекунды и секунды, если они равны нулю, а другие нет, и браузеры, которые не реализуют эти типы ввода, всегда будут показывать полную строку. См. пример.

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

Spec-Zone.ru

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