相关疑难解决方法(0)

在AngularJS中禁用不需要的验证(条件验证)

我有一个需要验证的表单.

表单包含许多部分,默认情况下会禁用其中一些部分.每个字段中的值都是正确的,但它违反了我的验证指令.例如,当它禁用时它应该包含0,但是当它可编辑时它应该包含其他内容.无论如何,我附加一个禁用指令给他们,并把它们放下.

当我提交表单(使用角度范围函数)时,if ($scope.sarfaslForm.$invalid)- >返回true.它说我检查$scope.sarfaslForm.$error列表时有两个无效字段.

在此博客之后,我实施了我的验证:http: //blog.yodersolutions.com/bootstrap-form-validation-done-right-in-angularjs/

这个线程之后,我创建了一个指令来忽略我的一些禁用控件:

我对这个指令做了一个小改动:

.directive('hsDisableValidation', function() {
    return {
        require: '^form',
        restrict: 'A',
        link: function(scope, element, attrs,form) {
            var control;

            scope.$watch(function() {
                return scope.$eval(attrs.hsDisableValidation);
            }, function(value) {
                if (!control) {
                    control = form[element[0].name];
                    //form[element.find("input").attr("name")];
                }
                if (value === false) {
                    form.$addControl(control);
                    angular.forEach(control.$error, function(validity, validationToken) {
                        form.$setValidity(validationToken, !validity, control);
                    });
                } else {
                    form.$removeControl(control);
                    //In Here: I tried to $setValidity of controls to true, Remove Error List, and …
Run Code Online (Sandbox Code Playgroud)

javascript validation angularjs angularjs-directive

10
推荐指数
1
解决办法
2539
查看次数

实现一个指令以从验证中排除隐藏的输入元素($ addControl issue)

我正在创建一个指令来从验证中排除隐藏的输入元素:http://plnkr.co/edit/Vnwvq2AT7JpgTnoQwGh9?p = preview

app.directive('shownValidation', function() {
    return {
      require: '^form',
      restrict: 'A',
      link: function(scope, element, attrs,form) {
        var control;

        scope.$watch(attrs.ngShow,function(value){
          if (!control){
            control = form[element.attr("name")];
          }
          if (value == true){
            form.$addControl(control);
          }else{
             form.$removeControl(control);
          }
        });
      }
    };
  });
Run Code Online (Sandbox Code Playgroud)

这里的想法是如果元素被隐藏,我将从表单中删除控件,以便它不会影响其他输入有效性.它在我打电话时工作正常 form.$removeControl(control);,您可以在演示中通过删除名字并单击按钮来隐藏字段来测试它.

但是当我再次单击该按钮时,即使名字无效(空),表单有效性仍然为真

我也尝试添加form.$setValidity(form.$valid && control.$valid)=>有效状态按预期更新,但是当我输入第一个名称时,有效性仍然是假的.

我的问题是如何解决这个问题?谢谢你的回复.

更新:

感谢@ Michael的回答.这是工作解决方案:

app.directive('shownValidation', function() {
  return {
    require: '^form',
    restrict: 'A',
    link: function(scope, element, attrs, form) {
      var control;

      scope.$watch(attrs.ngShow, function(value) {
        if (!control) {
          control = …
Run Code Online (Sandbox Code Playgroud)

forms validation angularjs

8
推荐指数
1
解决办法
6214
查看次数