Поле Angular UI Typeahead должно запускать проверку при размытии

У меня есть AngularUI Bootstrap Typeahead. Он срабатывает при изменении модели для фильтрации значения.

Однако у меня также есть директива, прикрепленная к этому полю, которая должна запускать onBlur. Директива ищет в базе данных, чтобы проверить, требуется ли другое поле на основе ввода поля typeahead.

Если я изменю ng-model-options на размытие, я уничтожу ввод. Если я изменяю директиву на функцию, чтобы использовать ng-blur, я не могу понять, как работать с промисами и асинхронными валидаторами.

Вот моя директива проверки:

 angular.module('myApp').directive('myfieldValidation', ['$q', 'myService', function ($q, myService) {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, elem, attrs, ctrl) {

            ctrl.$asyncValidators.myfieldisvalidated = function (modelValue) {
                var defer = $q.defer();
                myService.getdetailsofField(modelValue)
                    .then(function (response) {
                       console.log(response.data);
                       if (response.data.success == false && modelValue !== undefined && modelValue !== "") {
                            scope.launchfunction();
                            defer.reject();
                        }
                        else if (response.data.success == true) {
                            scope.Name = response.data.data["Name"];
                            scope.Number = response.data.data["Number"];
                        }
                        else {
                            defer.resolve();
                        }
                    });
                return defer.promise;
            };
        }
    }
}]);

person jenryb    schedule 20.05.2016    source источник


Ответы (1)


добавить тайм-аут в функцию onBlur.

    function onBlurFunction(){
      $timeout(function(){ 
        //some code
      }, 300);
    };
person Pedro Diniz    schedule 19.05.2017