gpt4 book ai didi

javascript - 防止 ng-click 触发确认对话框(在 Angular 1.2 RC3 中停止工作)

转载 作者:数据小太阳 更新时间:2023-10-29 04:30:06 26 4
gpt4 key购买 nike

我使用这个脚本在实际触发 ng-click 函数之前有一个确认对话框

Directives.directive('ngConfirmClick', [
function(){
return {
priority: 100,
restrict: 'A',
link: function(scope, element, attrs){
element.bind('click', function(e){
var message = attrs.ngConfirmClick;
if(message && !confirm(message)){
e.stopImmediatePropagation();
e.preventDefault();
}
});
}
}
}
]);

如上所见 http://zachsnow.com/#!/blog/2013/confirming-ng-click/

它通过以下方式使用:

<button ng-confirm-click="Are you sure?" ng-click="remove()">Remove</button>

SO 上还有其他类似的脚本,但是自从我更新到 Angular 1.2 RC3 后它们就停止工作了。 ng-click 函数总是在进入实际链接函数之前触发。

我还尝试增加优先级 并监听其他事件(touchstart,因为最新的angular 有这个新的ngtouch 指令)。但没有任何效果。

最佳答案

啊,我自己解决了!

最近 Angular 团队提交了一个更改前/后链接优先级的提交: https://github.com/angular/angular.js/commit/31f190d4d53921d32253ba80d9ebe57d6c1de82b

这现在包含在 Angular 1.2 RC3 中!

因此,帖子链接功能现在具有相反的优先级。

所以有两种方法可以解决这个问题。现在使用负优先级

Directives.directive('ngConfirmClick', [
function(){
return {
priority: -100, //<---------
restrict: 'A',
link: function(scope, element, attrs){
element.bind('click', function(e){
var message = attrs.ngConfirmClick;
if(message && !confirm(message)){
e.stopImmediatePropagation();
e.preventDefault();
}
});
}
}
}
]);

将函数转换为预链接函数

Directives.directive('ngConfirmClick', [
function(){
return {
priority: 100,
restrict: 'A',
link: {
pre: function(scope, element, attrs){ //<---------
element.bind('click touchstart', function(e){
var message = attrs.ngConfirmClick;
if(message && !window.confirm(message)){
e.stopImmediatePropagation();
e.preventDefault();
}
});
}
}
}
}
]);

关于javascript - 防止 ng-click 触发确认对话框(在 Angular 1.2 RC3 中停止工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19386289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com