Angularjs 如何防止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用于阻止正常操作。例如,没有到达目标,或者按钮

我想创建一个指令,它绑定到按钮上的“click”事件,并在满足条件时防止ng click触发

我知道我可以在ng click指令本身内处理此问题,例如

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处理程序触发。