2014-09-26 77 views
2

我正在使用angularJS,我試圖做一個窗體,其中用戶鍵入他的用戶名和應用程序驗證,如果它是可用的數據庫和他的長度是5/10字符之間。Ng-minlength不能與自定義驗證

<input type="text" name="uname" ng-model="user.uname" 
ng-minlength="5" ng-maxlength="10" uniqueusername required/> 

Uniqueusername是,檢查是否用戶名可用一個指令:

app.directive('uniqueusername', function($http){ 
return{ 
    require : 'ngModel', 
    restrict : 'A', 
    link : function(scope,elem,attrs,ctrl){ 
     ctrl.$parsers.unshift(function(value) { 
      $http.get('/api/check'+value).success(function(data,status){ 
       if(data.available=='true'){ 
        ctrl.$setValidity('unique',true); 
       } 
       else{ 
        ctrl.$setValidity('unique',false); 
......................................................................... 

當i型具有小於5個字符的用戶名,是有效的。這不應該發生。 如果我刪除uniqueusername輸入它完美的工作。

感謝您的回答。

+0

你可以發佈完整的uniqueusername指令? – 2014-09-26 14:30:34

+1

您正在使用哪個版本的Angular? Angular JS 1.3具有支持服務器異步驗證的新功能。您的問題很可能是常規驗證代碼不會等待您的.success回調發生。 – 2014-09-26 15:16:23

+0

@SunilD。我使用1.2.23,我會嘗試更改爲1.3。 – user3632000 2014-09-26 15:59:57

回答

0

你不得不返回從解析器函數的值:

app.directive('uniqueusername', function($http){ 
    return{ 
     require : 'ngModel', 
     restrict : 'A', 
     link : function(scope,elem,attrs,ctrl){ 
      ctrl.$parsers.unshift(function(value) { 
       $http.get('/api/check'+value).success(function(data,status){ 
        if(data.available=='true'){ 
         ctrl.$setValidity('unique',true); 
        } 
        else{ 
         ctrl.$setValidity('unique',false); 
        } 
       } 
       return value; 
      } 
     } 
    }); 
+0

非常感謝,你是對的。我忘記了回報價值。 – user3632000 2014-09-26 16:11:38