首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ng-event.on事件之前强制调用blur(‘blur’)事件?

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

Stack Overflow用户
提问于 2018-12-07 02:18:19
回答 1查看 143关注 0票数 0

所以这主要是为了保证向后兼容。我需要在大量的html元素中添加额外的blur功能,而不必编辑那些元素的ng-blur属性调用的控制器方法。

我写了一个指令来做这件事,但问题是这个指令方法似乎总是在控制器中的ng-blur方法之后完成执行。我需要在控制器中的ng-blur方法开始之前完成指令方法的执行。

以下是代码的基本格式:

代码语言:javascript
复制
<input test-directive ng-model="testValue" ng-blur="ngBlurTest(testValue)">

指令:

代码语言:javascript
复制
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')
                }
            });
        }
    };  
}])

控制器(方法)

代码语言:javascript
复制
$scope.ngBlurTest = function(value) {
    console.log('TEST FROM CONTROLLER: ' + value);
}

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2018-12-07 03:48:49

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

代码语言:javascript
复制
.directive('testDirective', [ function() {
    return {
        priority: 1000000,
        restrict: 'A',
        ...

也可以尝试使用addEventListener,但不要忘记清除它:

代码语言:javascript
复制
var listener = function(event) {...};
element[0].addEventListener('blur', listener);
...
scope.$on('$destroy', function() {
    element[0].removeEventListener('blur', listener);
});

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

代码语言:javascript
复制
element[0].addEventListener('blur', listener, true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53657471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档