在Angular中,我正在尝试验证模糊字段的值。我有一个客户列表,我想检查该字段中的模型值是否在我的客户列表中。如果没有,我想将有效性设置为假。
我知道ng-model-options="{updateOn: 'blur'}
存在,但是,我不能使用它,因为该字段是一个类型,因此必须根据模型进行更新。验证是模糊需要发生的事情。
答案似乎是:
将其作为控制器中的函数写入,并使用$ setValidity,就像在指令中一样。使用ng-blur触发输入字段中的功能。
- 但是,我继续遇到自定义验证(如果模型值与列表中的模型值不匹配,则使字段无效)的示例仅作为指令编写。是否有自定义验证的示例作为函数编写?
编写仅在模糊时触发的指令。
但是,我无法找到执行上述任何一项操作的示例。有没有人将自定义验证作为一个函数或一个只更新字段模糊的指令?
我发现此链接对自定义验证非常有用,但我仍然遇到与函数和指令之间差异相同的问题:How to add custom validation to an AngularJS form?
答案 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