所以这主要是为了保证向后兼容。我需要在大量的html元素中添加额外的blur功能,而不必编辑那些元素的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);
}谢谢你的帮助!
发布于 2018-12-07 03:48:49
我不确定这是否可行,但请尝试将指令的优先级设置为一个非常高的数字,例如:
.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);https://stackoverflow.com/questions/53657471
复制相似问题