poi*_*rez 84 javascript angularjs angularjs-directive angularjs-scope
我正在尝试ng-click
使用自定义angularjs指令设置确认对话框:
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)
}
});
}
};
}])
Run Code Online (Sandbox Code Playgroud)
这很好但很遗憾,使用我的指令在标记内的表达式不会被评估:
<button ng-click="sayHi()" ng-confirm-click="Would you like to say hi?">Say hi to {{ name }}</button>
Run Code Online (Sandbox Code Playgroud)
(这种情况下不评估名称).这似乎是由于我的指令的终端参数.你对解决方法有什么想法吗?
测试我的代码:http: //plnkr.co/edit/EHmRpfwsgSfEFVMgRLgj?p = preview
mik*_*kel 92
如果您不介意不使用ng-click
,它可以正常工作.您可以将其重命名为其他内容并仍然读取该属性,同时避免点击处理程序被触发两次问题.
http://plnkr.co/edit/YWr6o2?p=preview
我认为问题是terminal
指示其他指令不运行.数据绑定{{ }}
只是ng-bind
指令的别名,可能会被取消terminal
.
mik*_*rgh 56
更新:旧答案(2014)
它基本上拦截ng-click
事件,显示ng-confirm-click="message"
指令中包含的消息并要求用户确认.如果单击确认ng-click
,则执行正常操作,否则脚本将终止并且ng-click
不会运行.
<!-- index.html -->
<button ng-click="publish()" ng-confirm-click="You are about to overwrite your PUBLISHED content!! Are you SURE you want to publish?">
Publish
</button>
Run Code Online (Sandbox Code Playgroud)
// /app/directives/ng-confirm-click.js
Directives.directive('ngConfirmClick', [
function(){
return {
priority: -1,
restrict: 'A',
link: function(scope, element, attrs){
element.bind('click', function(e){
var message = attrs.ngConfirmClick;
// confirm() requires jQuery
if(message && !confirm(message)){
e.stopImmediatePropagation();
e.preventDefault();
}
});
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
Zach Snow的代码信用:http://zachsnow.com/#!/ blog/13/confirming-ng-click /
更新:新答案(2016)
1)将前缀从"ng"更改为"mw",因为前者('ng')保留用于本机角度指令.
2)修改指令传递函数和消息而不是拦截ng-click事件.
3)添加默认"你确定吗?" 如果未向mw-confirm-click-message =""提供自定义消息,则显示消息.
<!-- index.html -->
<button mw-confirm-click="publish()" mw-confirm-click-message="You are about to overwrite your PUBLISHED content!! Are you SURE you want to publish?">
Publish
</button>
Run Code Online (Sandbox Code Playgroud)
// /app/directives/mw-confirm-click.js
"use strict";
var module = angular.module( "myApp" );
module.directive( "mwConfirmClick", [
function( ) {
return {
priority: -1,
restrict: 'A',
scope: { confirmFunction: "&mwConfirmClick" },
link: function( scope, element, attrs ){
element.bind( 'click', function( e ){
// message defaults to "Are you sure?"
var message = attrs.mwConfirmClickMessage ? attrs.mwConfirmClickMessage : "Are you sure?";
// confirm() requires jQuery
if( confirm( message ) ) {
scope.confirmFunction();
}
});
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
Kai*_*las 46
对我来说,https://www.w3schools.com/js/js_popup.asp,浏览器的默认确认对话框工作得很好.刚试过这个:
$scope.delete = function() {
if (confirm("sure to delete")) {
// todo code for deletion
}
};
Run Code Online (Sandbox Code Playgroud)
简单.. :)
但我认为你无法自定义它.它将显示"取消"或"确定"按钮.
编辑:
如果您使用离子框架,则需要使用ionicPopup对话框,如下所示:
// A confirm dialog
$scope.showConfirm = function() {
var confirmPopup = $ionicPopup.confirm({
title: 'Delete',
template: 'Are you sure you want to delete this item?'
});
confirmPopup.then(function(res) {
if(res) {
// Code to be executed on pressing ok or positive response
// Something like remove item from list
} else {
// Code to be executed on pressing cancel or negative response
}
});
};
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅:$ ionicPopup
VBM*_*ali 10
它使用核心javascript + angular js如此简单:
$scope.delete = function(id)
{
if (confirm("Are you sure?"))
{
//do your process of delete using angular js.
}
}
Run Code Online (Sandbox Code Playgroud)
如果单击"确定",则将执行删除操作,否则不会.*id是要删除的参数,记录.
小智 5
您不想使用,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)
}
});
}
};
}
]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
231528 次 |
最近记录: |