Angular Form上的自定义验证 - 关于模糊

时间:2016-05-31 20:25:09

标签: javascript angularjs validation angularjs-directive angular-ngmodel

在Angular中,我正在尝试验证模糊字段的值。我有一个客户列表,我想检查该字段中的模型值是否在我的客户列表中。如果没有,我想将有效性设置为假。

我知道ng-model-options="{updateOn: 'blur'}存在,但是,我不能使用它,因为该字段是一个类型,因此必须根据模型进行更新。验证是模糊需要发生的事情。

答案似乎是:

  1. 将其作为控制器中的函数写入,并使用$ setValidity,就像在指令中一样。使用ng-blur触发输入字段中的功能。

    - 但是,我继续遇到自定义验证(如果模型值与列表中的模型值不匹配,则使字段无效)的示例仅作为指令编写。是否有自定义验证的示例作为函数编写?

  2. 编写仅在模糊时触发的指令。

  3. 但是,我无法找到执行上述任何一项操作的示例。有没有人将自定义验证作为一个函数或一个只更新字段模糊的指令?

    我发现此链接对自定义验证非常有用,但我仍然遇到与函数和指令之间差异相同的问题:How to add custom validation to an AngularJS form?

2 个答案:

答案 0 :(得分:3)

我们最近一直在努力的事情:

<form name='vm.formName' id='vm.formName' novalidate>
  <input type='text' id='textField' name='textField' ng-blur='vm.blurMethod()' ng-model='vm.model.text' />
  // The submit is only here for show;
  <input type='submit' id='submit' ng-click='vm.submitForm()' />
</form>

在控制器中:

blurMethod() {
  if (this.formName.textField.$viewValue !== myArbitraryValue) {
    // $setValidity called on the form, setting the textfield's validity to false
    // then you can have your own validators show the error in the template
    this.formName.$setValidity('textField', false);
  }
}

这是我的头顶,将在早上看看它是否反映了我们一直在使用的东西。立即更新了$ setValidity调用。

这假设您正在使用控制器:&#39; vm&#39;语法,这就是为什么表单有一个名称&#39; vm.formname&#39;并且控制器正在使用这个&#39;。

答案 1 :(得分:1)

我已经使用ui-bootstrap进行预先判断,并对您的验证有充分的控制ui-bootstrap typeahead

编辑 - 代码示例

<input type="text" ng-model="selected" typeahead="state for state in states | filter:$viewValue | limitTo:8" class="form-control" typeahead-no-results="$scope.matchFail"> <div ng-show="$scope.matchFail">Not on list!!</div>

当您选择不在列表中的值时,将显示div