Ein sauberer Richtlinienansatz.
Update: Alte Antwort (2014)
Es fängt das ng-clickEreignis grundsätzlich ab , zeigt die in der ng-confirm-click="message"Anweisung enthaltene Nachricht an und fordert den Benutzer zur Bestätigung auf. Wenn auf Bestätigen geklickt wird, wird der normale ng-clickVorgang ng-clickausgeführt. Andernfalls wird das Skript beendet und nicht ausgeführt.
<!-- 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>
// /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();
}
});
}
}
}
]);
Code Kredit an Zach Snow: http://zachsnow.com/#!/blog/2013/confirming-ng-click/
Update: Neue Antwort (2016)
1) Das Präfix wurde von 'ng' in 'mw' geändert, da das erstere ('ng') nativen Winkelanweisungen vorbehalten ist.
2) Die Anweisung wurde geändert, um eine Funktion und eine Nachricht zu übergeben, anstatt das ng-click-Ereignis abzufangen.
3) Standard hinzugefügt "Sind Sie sicher?" Nachricht für den Fall, dass keine benutzerdefinierte Nachricht an mw-verify-click-message = "" bereitgestellt wird.
<!-- 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>
// /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();
}
});
}
}
}
]);