Как заставить событие event.on ('blur') вызываться перед событием ng-blur? - PullRequest
0 голосов
/ 06 декабря 2018

Так что это в основном для обеспечения обратной совместимости.Мне нужно добавить дополнительную функциональность размытия для большого количества HTML-элементов без необходимости редактировать методы контроллера, вызываемые атрибутом ng-blur этих элементов.

Я написал директиву для этого, но проблемаЭтот метод директивы, кажется, всегда завершает выполнение после методов ng-blur в контроллере.Мне нужно, чтобы метод директивы завершился до того, как начнется метод ng-blur в контроллере.

Вот базовый формат кода:

<input test-directive ng-model="testValue" ng-blur="ngBlurTest(testValue)">

Директива:

angular.module('testDirectives', [])

.directive('testDirective', [ function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
            ngModel: '=',
        },

        link: function (scope, element, attrs, ngModelCtrl, test) {
            element.bind('blur', function() {
                    console.log('This needs to appear first')
                }
            });
        }
    };  
}])

Контроллер (Метод)

$scope.ngBlurTest = function(value) {
    console.log('TEST FROM CONTROLLER: ' + value);
}

Спасибо за помощь!

1 Ответ

0 голосов
/ 06 декабря 2018

Я не уверен, если это возможно, но попробуйте установить приоритет директивы на действительно большое число, например:

.directive('testDirective', [ function() {
    return {
        priority: 1000000,
        restrict: 'A',
        ...

Также попробуйте использовать addEventListener, но не забудьте очистить его:

var listener = function(event) {...};
element[0].addEventListener('blur', listener);
...
scope.$on('$destroy', function() {
    element[0].removeEventListener('blur', listener);
});

Также попробуйте установить для параметра useCapture addEventListener значение true:

element[0].addEventListener('blur', listener, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...