angularJs - 表单的自定义验证规则

标签 angularjs validation

我正在处理一个表单,我希望其中有一些自定义验证规则,例如:

field 2 has to be larger than field 1

field 3 is required if field 2 is not negative

...

HTML

<table>
<tr><th>Category</th><th> > </th> ≤ <th></tr>

<tr><td>Green</td>
    <td><input type="number" id="field1" ng-model="green.low"/></td>
    <td><input type="number" id="field2" ng-model="green.high"/></td></tr>
</table>

JS

我以这种方式检查验证:

function verifyForm(form, scope) {
    if (form.$error.required) {
        scope.addAlert("danger", "[![base.error.msg.required_fields]]");
        return false;
    }
    if (!form.$valid) {
        scope.addAlert("danger", "[![base.error.msg.invalid_form]]");
        return false;
    }
    return true;
};

所以当提交按钮被点击时,我只需要这样做:

if (!verifyForm($scope.formName, $scope))
        return;

如何添加这些自定义验证规则?或者,如果我必须自己用 javascript 编写它们,我怎样才能使某些元素“无效”?

最佳答案

我认为解决此类问题的正确 Angular 方法是创建执行 custom validation 的指令.

它不是很直观,您可能需要花几分钟来学习基本概念,但当它起作用时,它实际上是 Angular 的强大功能之一。

“大于其他输入”的验证器可能如下所示:

angular.module('myApp', []).directive('gtOther', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {

        ctrl.$validators.gtOther = function(modelValue, viewValue) { 
            var other = scope.$eval(attrs['gtOther']);
            var thisValue = parseInt(viewValue);
            return thisValue > other;                        
        };
    }
  };
});

这是一个 working plunkr

关于angularJs - 表单的自定义验证规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30320646/

相关文章:

javascript - 为什么 AngularJS 被称为不适合 GUI 编辑器应用程序?

jQuery 验证错误消息

c# - 使用 asp.net 验证器就足够了吗?

javascript - 使用 ng-href 进行下拉/选择重定向的 Angularjs 错误验证

asp.net-mvc - Asp.Net MVC 中 DataAnnotations StringLength 文本框的 maxlength 属性

html - Angular Js - 在 Angular TreeView 指令中呈现 html

javascript - 选择未使用 ng-model 选择正确的选项

javascript - Angularjs 使用 ng-options 选择

javascript - 为什么使用 `::` 表达式的 native 一次性绑定(bind)在 Angular 1.3.5 中不起作用

java - 如果密码使用MD5加密,如何在服务器端验证java中的密码规则?