2017-07-14 8 views
-1

カスタムディレクティブを使用して非同期検証を実装しようとしています。AngularJS - カスタムディレクティブを挿入すると、フォームが無効に変更されました

あなたはルートユーザ名が入力されたときに、このユーザ名であるため、戻りはJSONオブジェクトで見ることができるようにこれは、コンソール

console result when the username is typed

でディレクティブ

moduloArea.directive('uniqueName', function($http, $q) { 
    return { 
     require : 'ngModel', 
     link: function($scope, element, attrs, ngModel) { 
      ngModel.$asyncValidators.nombre = function(modelValue, viewValue) { 
       return $http.get('/checkUsernameAvailability/'+viewValue).then(
        function(response) { 
         if (!response.data.validUsername) { 
          return $q.reject(response.data.errorMessage); 
         } 
         return true; 
        } 
       ); 
      }; 
     } 
    }; 
}); 

結果であり、使用中。

しかし、HTMLには、directive unique-nameが挿入されたときの$が無効です。

Attribute name "data-unique-name" associated with an element type "input" must be followed by the ' = ' character.

あなたは何を:私がない場合、次のエラーが発生しthymeleafので

<form name="registerUsernameForm" novalidate="novalidate"> 
    <input type="text" name="username" data-ng-model="person.userName" data-unique-name="" required="required"/> 
    <span data-ng-show="registerUsernameForm.username.$error.uniqueName">This username is already taken.</span>   
    <button type="submit" data-ng-disabled="registerUsernameForm.$invalid || registerUsernameForm.$pending" data-ng-click="registerPerson(person)"> Save Person </button> 
</form> 

私は、データ固有名=「」(=「」)を使用しています考えて間違っていると思いますか?

答えて

1

nombreuniqueNameを確認しています。このため、uniqueNameは引き続き無効です。

moduloArea.directive('uniqueName', function($http, $q) { 
    return { 
     require : 'ngModel', 
     link: function($scope, element, attrs, ngModel) { 
      ngModel.$asyncValidators.uniqueName= function(modelValue, viewValue) { 
       var value = modelValue || viewValue; 
       return $http.get('/checkUsernameAvailability/'+value).then(
        function resolved(response) { 
         if (response.data && !response.data.validUsername) { 
          return $q.reject(response.data.errorMessage); 
         } 
         return true; 
        }, function rejected() { 
         //username does not exist, therefore this validation passes 
         return true; 
} 
       ); 
      }; 
     } 
    }; 
}); 
+0

感謝の男私は本当にこれでnoobのと私は以降「を解決機能(応答)」から迷ってしまいました8.だように、あなたは私にこのディレクティブを説明するだろう。 – wilson

+1

はコードを消去するための単なる名前です。あなたはあなたが望むものを設定することができます。 $ http約束は基本的に2コールバックです。最初は成功し、2番目にエラーが発生する可能性があります。残りのAPIが2XXステータスを返すとき、これは成功であることを意味します。 4XXはクライアントエラー、5XXはサーバーエラーです。つまり、名前が存在しない場合はエラーをスローすることができます。これは検証の成功を意味します。 –

関連する問題