如何在两个字段的验证中显示验证消息并使表单无效

时间:2016-02-16 09:47:09

标签: angularjs validation angularjs-directive

我想对两个字段的总和进行验证,两个字段都是数字输入,但总数不得大于100.

所以我想我会创建一个hidden input来从我的控制器中读取总数,然后创建一个自定义validationdirective来检查该值是否为< = 100并创建一个检查是否为该输入有效与否,然后显示/隐藏它。

但输入绑定到我的控制器上的一个函数(将两个字段加在一起),所以我不能使用ng-model。 所以我认为我使用ng-bind,但是我的验证指令抱怨了这个: require: 'ngModel',,因为我没有ng模型了。

所以我删除了require,但后来ctrl.$validators不再存在,这给了我一个错误....

现在我迷路了: - )

我的验证指导是:

angular.module(Config.name).directive('maxvalue', function () {
    return {
        require: 'ngModel',
        link: function (scope, elm, attrs, ctrl) {
            ctrl.$validators.maxvalue = function (modelValue, viewValue) {
                //validation here

            };
        }
    };
});

你能解决这个问题吗?

修改

也许我的问题更广泛:我有更多这些像alidations,其中验证不依赖于单个输入字段。我还有两个按钮,用户可以单击(按钮类型,但随后用2个按钮实现)。我还希望在没有单击按钮时显示跨度+使表单无效。

但是我不知道如何对表格“你是无效的”说出来,也不是来自控制器的形式本身。

1 个答案:

答案 0 :(得分:1)

对于设置表单或输入有效\无效,您​​可以使用$setValidity

但我建议使用特殊库use-form-error

您可以在jsfiddle

上看到使用示例



angular.module('ExampleApp', ['use', 'ngMessages'])
  .controller('ExampleController', function($scope) {

  });

.errors {
  color: maroon
}

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-messages.min.js"></script>
<script src="https://cdn.rawgit.com/Stepan-Kasyanenko/use-form-error/master/src/use-form-error.js"></script>

<div ng-app="ExampleApp">
  <div ng-controller="ExampleController">

    <form name="myForm">
      <label>Enter your digit 1:</label>
      <input type="text" ng-model="digit1" name="myDigit1" />
      <br>
       <label>Enter your digit 2:</label>
      <input type="text" ng-model="digit2" name="myDigit3"  />

     
       <div  use-form-error="isGeaterHundred" use-error-expression="digit1*1+digit2*1>100" ng-messages="myForm.$error" class="errors">
        <div ng-message="isGeaterHundred">Your sum is greated then 100</div>
      </div>
      <input type="submit" ng-disabled="myForm.$invalid">
    </form>
    
  </div>
</div>
&#13;
&#13;
&#13;