Angularjs 如何防止ng click触发
我想创建一个指令,它绑定到按钮上的“click”事件,并在满足条件时防止ng click触发 我知道我可以在ng click指令本身内处理此问题,例如Angularjs 如何防止ng click触发,angularjs,Angularjs,我想创建一个指令,它绑定到按钮上的“click”事件,并在满足条件时防止ng click触发 我知道我可以在ng click指令本身内处理此问题,例如 ng-click="vm.form.$valid && vm.savePost(vm.post)" 但我的要求比这要复杂一点 我确实创建了一个指令,然后绑定到按钮的click事件并调用e.preventDefault,但这并没有阻止ng click触发。Prevent default用于阻止正常操作。例如,没有到达目标,或者按钮
ng-click="vm.form.$valid && vm.savePost(vm.post)"
但我的要求比这要复杂一点
我确实创建了一个指令,然后绑定到按钮的click事件并调用e.preventDefault,但这并没有阻止ng click触发。Prevent default用于阻止正常操作。例如,没有到达目标,或者按钮没有提交等等 ng click和onclick不是默认操作,您无法使用preventDefault阻止它
您必须使用ng click中的函数,以便在操作之前设置条件。可能首先触发ngClick指令。在这种情况下,您可以尝试使用优先级设置:
(function (module) {
var myDirective = function () {
return {
restrict: 'A',
scope: true,
priority: 1000,
........
};
};
module.directive("myDirective", myDirective);
}(angular.module("module")));
从官方文件中:
优先权
当在单个DOM元素上定义了多个指令时,
有时有必要指定指令的顺序
都适用。优先级用于在指令发出之前对指令进行排序
编译函数被调用
我知道这个问题已经很老了,但是下面的指令绑定了一个click事件处理程序,它阻止了绑定到同一html元素上的ng click函数的调用 关键是: 优先级:-1:由于ngClick的优先级为0,我们的指令的链接后链接功能将在ngClick链接功能之后执行,如中所述: 首先编译具有更高数字优先级的指令。 前链接功能也按优先级顺序运行,但后链接功能除外 函数按相反的顺序运行。指令的顺序与 相同的优先级未定义 e、 停止即时传播;如下列文件所述: 除了保留元素上的任何附加处理程序之外 在执行时,此方法还通过隐式 正在调用event.stopPropagation 指令代码:
.directive('noClick', [function(){
return {
priority: -1,
link: function(scope, iElem, iAttr){
iElem.on('click', noClick);
function noClick(e) {
e.stopImmediatePropagation();
e.preventDefault();
}
}
};
}])
HTML代码
<div no-click ng-click="myFunct()">
归功于我通常创建一个自定义的sumbit函数,在ng单击时执行额外的检查,然后再创建一个ng disable函数。好的,有100%的方法-间接将ngClick attr存储为变量,然后将ngClick设置为空值,然后在单击时绑定新函数-如果条件满足,则启动存储函数。虽然不是很好的解决方案,但通常你可以阻止ng click。@PetrAveryanov你可以通过stopPropagation阻止onclick事件。我尝试过这个方法,但它仍然不能阻止ng click处理程序触发。