2016-09-16 3 views
2

Ich versuche, eine Direktive zu erstellen, die Mail vom Benutzer durch asynchrone Webanforderung validiert. Es funktioniert gut, aber das Problem ist, dass die asynchronen Anrufe jedes Mal gemacht werden, wenn der Benutzer ein Zeichen eingibt, ich möchte, dass die asynchronen Aufrufe nur bei Unschärfe gemacht werden, wie kann ich das tun? HierAsyncronous Validierung Direktive auf Unschärfe eckig JS

ist der Code für die Richtlinie:

angular.module('myModule').directive('usernameValidator', function($http, $q) { 
return { 
    require: 'ngModel', 
    link: function(scope, element, attrs, ngModel) { 
     ngModel.$asyncValidators.username = function(modelValue, viewValue) { 
      return $http.post('/username-check', {username: viewValue}).then(
       function(response) { 
        if (!response.data.validUsername) { 
         return $q.reject(response.data.errorMessage); 
        } 
        return true; 
       } 
      ); 
     }; 
    } 
}; 
}); 

ich versucht habe, alles in einem Block

element.bind('blur', function() { ... }) 

Aber zu setzen, wenn der Code innerhalb element.bind Block ist habe ich ein total seltsam Verhalten: erstmalige Fokussierung der Eingabe, keine asynchronen Anrufe, wenn ich keine asynchronen Anrufe verwischen, wenn ich den Fokus auf die Eingabe zurück Ich habe asynchrone Anrufe für jedes Zeichen.

Antwort