2015-04-16 27 views
1

我有一个表单,我在使用ng-show在邮编不存在时显示或隐藏元素。

查看

<input type="text" name="postcode" placeholder="Postcode" ng-model="project.postcode" required integer postcode>  
<span ng-show="form.postcode.$error.postcode">That post code does not exist!</span> 

邮政编码验证指令

.directive('postcode', function($q, $timeout, ParseService) { 
     return { 
      require: 'ngModel', 
      link: function(scope, elm, attrs, ctrl) { 

       ctrl.$asyncValidators.postcode = function(modelValue, viewValue) { 

        var def = $q.defer(); 
        ParseService.getRawObject(new Parse.Query("Zone") 
         .equalTo('postCode', parseInt(modelValue)).ascending('order')).then(function(results){ 

         if(results.length == 1) 
           def.resolve(); 
         else if(results.length > 1) { 
          def.reject('multiple'); 
          scope.postcodeerror = 'multiple'; 
          scope.postcodetowns = results; 
         } 
         else 
          def.reject(); 
        }); 

        return def.promise; 
       }; 
      } 
     }; 

一切运作良好的正规的决心和拒绝,但是当我用“多”错误代码拒绝,我想在form.postcode的$ error对象内评估这个...

<span ng-show="form.postcode.$error.postcode=='multiple'">This post code has multiple suburbs assigned to it!</span> 

是否可以这样做?或者我只需要设置一些范围?

感谢

+0

你能发布“邮政编码”指令的代码(无双关语)? –

回答

2

我检查Angular source code和它根本不使用由拒绝承诺返回的数据。但是你可以做你自己通过调用$setValidity

.then(function(results) { 
    scope.postcodetowns = results; 
    ctrl.$setValidity('postcode', results.length === 0); 
    ctrl.$setValidity('postcode_multiple', results.length > 1); 
    def.resolve(); 
} 
return def.promise; 

现在你可以使用form.postcode.$error.postcode_multiplengShow

<span ng-show="form.postcode.$error.postcode_multiple"> 
    This post code has multiple suburbs assigned to it! 
</span> 

甚至更​​好,与ngMessages

<div ng-messages="form.postcode.$error"> 
    <span ng-message="postcode">That post code does not exist!</span> 
    <span ng-message="postcode_multiple">This post code has multiple suburbs assigned to it!</span> 
</div> 
相关问题