更改异步验证程序的运行方式

时间:2019-04-05 05:39:26

标签: javascript angularjs validation

是否可以先更新模型,然后运行验证器?我有一个异步验证器,该验证器在输入(类型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 个答案:

答案 0 :(得分:1)

使用allowInvalid: true。从逻辑上讲这是有道理的-如果您想在验证之前更改值,则应在模型中允许使用无效值。

ng-model-options="{debounce: 100, allowInvalid: true}"