Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ng-really? An AngularJS directive that creates a confirmation dialog for an action.
/**
* A generic confirmation for risky actions.
* Usage: Add attributes: ng-really-message="Are you sure"? ng-really-click="takeAction()" function
*/
angular.module('app').directive('ngReallyClick', [function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function() {
var message = attrs.ngReallyMessage;
if (message && confirm(message)) {
scope.$apply(attrs.ngReallyClick);
}
});
}
}
}]);
@dhlavaty
Copy link

dhlavaty commented Apr 28, 2014

@asafge -> Yes, this is a possible solution. But question is: Is it a memory leak, or not ?

@emw-ghertner
Copy link

emw-ghertner commented Apr 30, 2014

Thank you!

@sampov2
Copy link

sampov2 commented May 2, 2014

@dhlavaty it's more like a logic leak. If something removes this attribute (which is rare though), this handler will still be there, and clicking the element will trigger the functionality. If this element is removed from the DOM, the click handler is cleaned up and as such, it would be cleaned up properly. I haven't seen directives or other angular code which dynamically fiddles with the existence of attributes. Taking this into consideration, this directive can be considered safe.

@dhlavaty
Copy link

dhlavaty commented May 5, 2014

In my case, I use ng-really for a delete action. I have a table with records, and each record has (in last column) a DELETE button with ng-really. When user confirms deletion, particular record is deleted from collection and Angular will "repaint" the table (a.k.a. removes the whole table row with record). And now I'm not really sure, if Angular will safely remove 'click' handler itself or not.

PS: Of course, using '$destroy' event as described above is a good practice, but I'm still wondering if I understand it correctly.

@gamikun
Copy link

gamikun commented Jul 8, 2014

Thanks :D

@neilellis
Copy link

neilellis commented Jul 22, 2014

Awesome thank you!

@spinybeast
Copy link

spinybeast commented Oct 16, 2014

so easy & so awesome! thank you so much!

@javiros
Copy link

javiros commented Oct 24, 2014

+1 Thank you!

@arkka
Copy link

arkka commented Dec 3, 2014

Thanks. Very straight forward and useful.

@itmammoth
Copy link

itmammoth commented Dec 3, 2014

it's really helpful!

@phonyphonecall
Copy link

phonyphonecall commented Jan 8, 2015

Clean and simple. Thanks.

@breadcrumble
Copy link

breadcrumble commented Feb 26, 2015

This is great and easy to use. Thanks!

@mikethejet
Copy link

mikethejet commented Mar 16, 2015

Looks good but, i dont know why but my confirm action is called twice (so http ajax) loading the page for two times... is there any reason ?
(script included only once)
áááááh the directive was included for twice time ..sorry ! ;)

@OKNoah
Copy link

OKNoah commented Mar 25, 2015

Is this available as a module through Bower?

@marianoqueirel
Copy link

marianoqueirel commented Apr 26, 2015

hello, thank it served me.
a query, if confirmed execute an action , but if not confirmed , I just submit the form , I need to do nothing , to if
if ( message && confirm ( message) ) {
$ scope apply ( attrs.ngReallyClick ) . ;
} else {
$ scope apply ( void (0 ) ) . ;
}

I put something, so you do not run nothing but works for me , just send the form where I have incorporated ng - really- click

@vinibol12
Copy link

vinibol12 commented May 4, 2015

great job! worked perfectly!

@renatojf
Copy link

renatojf commented May 13, 2015

great snippet!

@maciej-gurban
Copy link

maciej-gurban commented Jul 3, 2015

Thanks!

@fbriou
Copy link

fbriou commented Dec 8, 2015

Top! Thank you.

@gr33k01
Copy link

gr33k01 commented Apr 6, 2016

This is so great. Thanks!

@joelgarciajr84
Copy link

joelgarciajr84 commented Jun 16, 2016

Awesome man! 👍

@douglasFranco
Copy link

douglasFranco commented Jun 23, 2016

Beginner saved. Tnahk you!

@rkingon
Copy link

rkingon commented Aug 19, 2016

FYI - you don't need to clean this up afterwards w/ $destroy because the element that has the event listener is already being removed which also kills the bind (personally though, I would use on over bind

@yvaldez087
Copy link

yvaldez087 commented Aug 31, 2016

Hi,
Im using a function just like this but i have an issue as other guys told, everytime l select cancel button the requested post it increments one at time, This way when l finally confirm the modal lt sends all the cumulative requests.
Someone have this issue?

@jerronimo
Copy link

jerronimo commented Oct 25, 2016

thx

@f2001340
Copy link

f2001340 commented Jan 4, 2017

Thankyou! Good Stuff.

@pragyeshthakur
Copy link

pragyeshthakur commented Mar 2, 2017

Thank you somuch...

@prashantbiradar92
Copy link

prashantbiradar92 commented Mar 10, 2017

nice na !!!

@muthubonzi
Copy link

muthubonzi commented Jul 1, 2017

confirm action is called thrice :( and ajax post is called thrice in my case, can someone help?

@dimaanj
Copy link

dimaanj commented Sep 9, 2019

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment