首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AngularJS中,当同一表单中的另一个值被更改时,如何强制对表单中的字段进行重新验证?

在AngularJS中,当同一表单中的另一个值被更改时,如何强制对表单中的字段进行重新验证?
EN

Stack Overflow用户
提问于 2015-08-16 16:10:31
回答 1查看 4.1K关注 0票数 5

我有一个有几个字段的表单,但是select和input字段耦合在一起:输入的验证取决于用户在select字段中选择的值。

我将试着用一个例子来澄清。假设选择包含行星名称:

代码语言:javascript
复制
<select id="planet" class="form-control" name="planet" ng-model="planet" ng-options="c.val as c.label for c in planets"></select>

在输入中,我通过一个名为“输入验证”的自定义指令应用自定义验证:

代码语言:javascript
复制
<input id="city" input-validation iv-allow-if="planet==='earth'" class="form-control" name="city" ng-model="city" required>

如果这是指令:

代码语言:javascript
复制
.directive('inputValidation', [function() {
  return {
    require: 'ngModel',
    restrict: 'A',
    scope: {
      ivAllowIf: '='
    },
    link: function(scope, elm, attrs, ctrl) {
      ctrl.$parsers.unshift(function(viewValue) {

        //input is allowed if the attribute is not present or the expression evaluates to true
        var inputAllowed = attrs.ivAllowIf === undefined || scope.$parent.$eval(attrs.ivAllowIf);

        if (inputAllowed) {
          ctrl.$setValidity('iv', true);
          return viewValue;
        } else {
          ctrl.$setValidity('iv', false);
          return undefined;
        }

      });
    }
  };
}]) 

完整的示例可以在Plnkr:http://plnkr.co/edit/t2xMPy1ehVFA5KNEDfrf?p=preview中检查。

无论何时修改select,我都需要再次验证输入。这在我的代码中是不会发生的。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-16 16:28:31

我也做过同样的事情来验证开始日期更改结束日期.在开始日期的指令中,添加监视结束日期的更改,然后在定义结束日期新值的情况下调用ngModel.$validate()

代码语言:javascript
复制
    scope.$watch(function () {
        return $parse(attrs.endDate)(scope);
    }, function () {
        ngModel.$validate();
    });

重要的部分是在指令中调用ngModel.$validate()

备注您应该使用$validators进行上述自定义验证才能工作。在这里读,$parsers是旧的方式-从angularjs1.3使用$validators

固定柱塞连杆

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32037229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档