2015-09-02 39 views
0

我正在使用ng-pattern和自定义异步验证程序的angular 1.4。仅当输入有数据时才进行角度验证

我有两个字段与验证,一个是必需的,另一个不是。我需要验证第二个提交的内容,当它有内容时。问题是,当第二个字段的验证器未通过时,我无法提交表单。

有没有一个这样做的优雅方式?

感谢

<input 
    name="name" 
    type="text" 
    ng-model="model.software.name" 
    required> 
<div ng-messages="myForm.myInput.$error" ng-if="myForm.name.$touched && myForm.name.$invalid"> 
    <p ng-message="required">Required warning</p> 
</div> 

<input 
    name="myInput" 
    type="text" 
    ng-model="myInput" 
    ng-pattern="/someregex/" 
    async-validator> 
<div ng-if="myForm.myInput.$pending">PENDING</div> 
<div ng-messages="myForm.myInput.$error" ng-if="myForm.myInput.$touched && myForm.myInput.$invalid"> 
    <p ng-message="pattern">Pattern warning</p> 
    <p ng-message="asyncValidator">async warning</p> 
</div> 

<button ng-click="process()" ng-disabled="myForm.$invalid">Process</button> 

这里是我的验证:

app.directive('asyncValidator', ['$http', '$q', function ($http, $q) { 
    return { 
     require : 'ngModel', 
     link : function (scope, element, attrs, ngModel) { 
      ngModel.$asyncValidators.asyncValidator = function (modelValue, viewValue) { 
       return $http.post('path', {value : viewValue}).then(
        function (response) { 
         if (not_good) { 
          return $q.reject(not_good); 
         } 
         return true; 
        } 
       ); 
      }; 
     } 
    }; 
}]); 
+1

听起来像是你的异步验证的一个问题。它是否允许空值传递? –

+0

谢谢你,我已经更新了我的问题,并添加了我的验证器。我不确定你的意思是允许空值传递。 顺便说一句,验证器在页面加载时运行一次,也不知道为什么。 再次感谢 – Thibs

+0

是你的服务器说空白值好还是不好? – pherris

回答

0

后多一点挖,我发现,这是我的asyncvalidator这是不允许空值。这有效,但如果有更好的方法,请让我知道。

非常感谢Anid和所有人。

调整后的验证:

app.directive('asyncValidator', ['$http', '$q', function ($http, $q) { 
    return { 
     require : 'ngModel', 
     link : function (scope, element, attrs, ngModel) { 
      ngModel.$asyncValidators.asyncValidator = function (modelValue, viewValue) { 
       if (ngModel.$isEmpty(viewValue)) { 
        return $q.resolve(); 
       } 
       return $http.post('path', {value : viewValue}).then(
        function (response) { 
         if (not_good) { 
          return $q.reject(not_good); 
         } 
         return true; 
        } 
       ); 
      }; 
     } 
    }; 
}]); 
相关问题