Изменить способ запуска асинхронных валидаторов - PullRequest
0 голосов
/ 05 апреля 2019

Можно ли сначала обновить модель, а затем запустить валидатор?У меня есть асинхронный валидатор, который запускается при обновлении ввода (тип range).

Я хочу сначала обновить значение в шаблоне HTML, а затем запустить валидатор.Поведение по умолчанию - сначала запустить валидатор, а затем обновить модель, если проверка завершена.

Пожалуйста, обратитесь к приведенному ниже фрагменту:

angular.module('app', [])
  .controller('ctrl', ($scope) => {
    $scope.value = 0;
  })
  .directive('validateValue', ($http) => {
    return {
      require: 'ngModel',
      scope: false,
      link: linkFn
    };

    function linkFn(scope, elem, attrs, modelCtrl) {
      modelCtrl.$asyncValidators.validValue = (m, v) => {
        return $http.get('https://httpbin.org/delay/1');
      };
    }
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="ctrl">
    <form>
      <input type="range" ng-model="value" ng-model-options="{debounce: 100}" validate-value> {{value}}
    </form>
  </div>
</div>

1 Ответ

1 голос
/ 05 апреля 2019

Используйте allowInvalid: true. Логически это имеет смысл - если вы хотите изменить значение перед проверкой, вам следует разрешить недопустимые значения в модели.

ng-model-options="{debounce: 100, allowInvalid: true}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...