我正在尝试使用自定义的angularjs指令在ng-click
上设置确认对话框:
app.directive('ngConfirmClick', [
function(){
return {
priority: 1,
terminal: true,
link: function (scope, element, attr) {
var msg = attr.ngConfirmClick || "Are you sure?";
var clickAction = attr.ngClick;
element.bind('click',function (event) {
if ( window.confirm(msg) ) {
scope.$eval(clickAction)
}
});
}
};
}])
这很有效,但不幸的是,使用我的指令的标记内的表达式不会被求值:
<button ng-click="sayHi()" ng-confirm-click="Would you like to say hi?">Say hi to {{ name }}</button>
(这种情况下不计算名称)。这似乎是由于我的指令的终端参数造成的。您有任何解决方法的想法吗?
发布于 2013-08-19 20:36:10
如果你不介意不使用ng-click
,它工作得很好。您可以将其重命名为其他名称,同时仍然读取该属性,同时避免当前存在的两次触发单击处理程序的问题。
http://plnkr.co/edit/YWr6o2?p=preview
我认为问题在于terminal
指示其他指令不运行。与{{ }}
的数据绑定只是ng-bind
指令的别名,该指令可能已被terminal
取消。
发布于 2015-06-08 19:21:40
使用核心javascript + angular js非常简单:
$scope.delete = function(id)
{
if (confirm("Are you sure?"))
{
//do your process of delete using angular js.
}
}
如果单击确定,则执行删除操作,否则不执行删除操作。* id是您要删除的参数,记录。
发布于 2014-03-12 12:05:03
您不想使用terminal: false
,因为它阻塞了按钮内部的处理。取而代之的是,在link
中清除attr.ngClick
以防止默认行为。
http://plnkr.co/edit/EySy8wpeQ02UHGPBAIvg?p=preview
app.directive('ngConfirmClick', [
function() {
return {
priority: 1,
link: function(scope, element, attr) {
var msg = attr.ngConfirmClick || "Are you sure?";
var clickAction = attr.ngClick;
attr.ngClick = "";
element.bind('click', function(event) {
if (window.confirm(msg)) {
scope.$eval(clickAction)
}
});
}
};
}
]);
https://stackoverflow.com/questions/18313576
复制相似问题