2016-12-22 9 views
0

私は、入力された電子メールが利用可能かどうかを確認する指令を持っています、有効性はうまくいきます。そうでなければ、私は素晴らしいメッセージはありません...私の問題は、検証が失敗したときに、入力された電子メール(電子メールが取られたとき)がユーザースコープ変数に保持されていることです。これは、フィールドが空であるか、電子メールのフォーマットが有効でない場合には当てはまりません(正確にはemailAvailableディレクティブにも必要です)。あなたは私が逃したものを私に説明してもらえますか?電子メールがAngular Jsを通して取られるかどうか確認してください

HTML:

<div class="col-md-12 wow fadeIn"> 
    <div class="md-form"> 
     <div class="md-form"> 
      <input type="text" 
        name="email" 
        ng-model="user.email" 
        ng-pattern="emailFormat" 
        email-available 
        required 
        ng-model-options="{ updateOn: 'blur' }" class="form-control"> 
      <label for="email" class="">Email</label> 
       <span ng-if="userRegistration.$pending.emailTaken" class="text-success">Vérification....</span> 
       <div ng-if="userRegistration.$error.emailTaken" class="text-danger">Adresse email déjà prise.</div> 
       <div ng-show="userRegistration.$submitted || userRegistration.email.$touched"> 
       <div ng-show="userRegistration.email.$error.required" class="text-danger">Vous devez indiquer votre email.</div> 
       </div> 
       <div ng-show="userRegistration.email.$error.pattern" class="text-danger"> 
        Votre adresse e-mail n'est pas valide. 
       </div> 
     </div> 
    </div> 
</div> 

角度JS

website.directive('emailAvailable', function($timeout, $q, $http, RESOURCE_API) { 
     return { 
     restrict: 'AE', 
     require: 'ngModel', 
     link: function(scope, elm, attr, model) { 

      model.$asyncValidators.emailTaken = function() { 

      return $http({ method: 'POST', url: RESOURCE_API + '/users/checkEmail', 
      headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, data : {'email': elm.val()} }) 
      .then(function(result) { 
       $timeout(function(){ 
       model.$setValidity('emailTaken', false); 
       if (result.data.data.check == 1) { 
        // Email Taken, Validation Failed 
        model.$setValidity('emailTaken', false); 
       } else { 
        model.$setValidity('emailTaken', true); 
       } 
       }, 1000); 
      }); 
      }; 
     } 
     } 
    }); 

答えて

0

あなたが拒否された約束を返していないので、検証が失敗した場合のモデルバリデータは知りません。私は$ qの例を作りました。 this plunker.を参照してください。拒否された約束に対してモデルが空であることがわかります。

 model.$asyncValidators.emailTaken = function(modelValue) { 
      var deferred = $q.defer(); 
      if(modelValue === 'test') { // Email Taken, Validation Failed 
       deferred.reject(); 
      } else { 
       deferred.resolve('success'); 
      } 
      return deferred.promise; 
      }; 
     } 
+0

ありがとうございます。 – CREAZPRO

関連する問題