如何强制在ng-blur事件之前调用event.on('blur')事件?

时间:2018-12-06 18:18:19

标签: angularjs

因此,这主要是为了确保向后兼容。我需要为大量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 :(得分:1)

我不确定是否可以,但是尝试将指令的优先级设置为一个很高的数字,例如:

.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);
});

还尝试将addEventListener的useCapture参数设置为true:

element[0].addEventListener('blur', listener, true);