Как получить другие обработчики событий элемента в функции Angular 1.x link - PullRequest
0 голосов
/ 05 октября 2019

Я имею дело с двумя атрибутами angular, которые обрабатывают как событие нажатия клавиши Enter, так и событие Blur элемента ввода, которые оба вызывают один и тот же метод области действия:

<input type="number" ng-enter="doSomeThing()" ng-blur="doSomething()" />

Проблема с этой настройкойявляется то, что событие Enter keypress также вызывает событие Blur почти одновременно, так что это вызвало ошибку параллелизма EF на сервере. Чтобы решить эту проблему, мне пришлось сделать так, чтобы метод вызывался только один раз. Кстати, ngEnter - это пользовательская директива:

myApp.directive('ngEnter', function () {

    function link(scope, element, attrs) {
        element.bind("keypress", function (event) {
            if (event.which === 13) {
                scope.$apply(function () {
                    scope.$eval(attrs.ngEnter);
                });
                event.preventDefault();
            }
        });
    };

    link.$inject = ["scope", "element", "attrs"];

    return {
        link: link
    }

});

Мне удалось отменить событие размытия, вызвав element.off('blur') внутри функции нажатия клавиш следующим образом:

if (attrs.ngBlur && attrs.ngBlur == attrs.ngEnter) {
    element.off('blur');
}

но теперь проблема в том, что обработчик размытия в элементе пропал, поэтому мне пришлось повторно привязать обработчик к событию размытия, но у элемента нет списка событий. Я попытался jQuery._data(element, "events" );, но он ничего не возвращает, даже элемент data не определен. element.off('blur') работал, поэтому обработчик должен быть где-то там, но где или как мне получить доступ к этим обработчикам? Хранит ли Angular эти обработчики по-другому по сравнению с Jquery?

...