2015-04-16 25 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> 
相關問題