Ich versuche, einen Bestätigungsdialog für ng-click
eine benutzerdefinierte AngularJS-Direktive einzurichten:
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)
}
});
}
};
}])
Dies funktioniert gut, aber leider werden Ausdrücke innerhalb des Tags, die meine Direktive verwenden, nicht ausgewertet:
<button ng-click="sayHi()" ng-confirm-click="Would you like to say hi?">Say hi to {{ name }}</button>
(Name wird in diesem Fall nicht ausgewertet). Es scheint am Terminalparameter meiner Direktive zu liegen. Haben Sie Ideen zur Problemumgehung?
So testen Sie meinen Code: http://plnkr.co/edit/EHmRpfwsgSfEFVMgRLgj?p=preview
Antworten:
Wenn es Ihnen nichts ausmacht, nicht zu verwenden
ng-click
, funktioniert es OK. Sie können es einfach in etwas anderes umbenennen und das Attribut trotzdem lesen, ohne zu vermeiden, dass der Klick-Handler zweimal ausgelöst wird.http://plnkr.co/edit/YWr6o2?p=preview
Ich denke, das Problem besteht darin
terminal
, andere Anweisungen anzuweisen, nicht auszuführen. Die Datenbindung mit{{ }}
ist nur ein Alias für dieng-bind
Direktive, die vermutlich von aufgehoben wirdterminal
.quelle
Ein sauberer Richtlinienansatz.
Update: Alte Antwort (2014)
Es fängt das
ng-click
Ereignis grundsätzlich ab , zeigt die in derng-confirm-click="message"
Anweisung enthaltene Nachricht an und fordert den Benutzer zur Bestätigung auf. Wenn auf Bestätigen geklickt wird, wird der normaleng-click
Vorgangng-click
ausgeführt. Andernfalls wird das Skript beendet und nicht ausgeführt.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.
quelle
Für mich, https://www.w3schools.com/js/js_popup.asp , hat das Standard-Bestätigungsdialogfeld des Browsers sehr gut funktioniert. habe gerade das ausprobiert:
Einfach .. :)
Aber ich denke, Sie können es nicht anpassen. Es wird mit der Schaltfläche "Abbrechen" oder "OK" angezeigt.
BEARBEITEN:
Wenn Sie ein ionisches Framework verwenden, müssen Sie den ionicPopup-Dialog wie folgt verwenden:
Weitere Informationen finden Sie unter: $ ionicPopup
quelle
== true
, was in diesem Fall völlig unnötig ist, daconfirm()
bereits ein Boolescher Wert zurückgegeben wird. Sie müssen JS nicht dazu bringen, erzwingen und mit true vergleichen.Es ist so einfach mit Core Javascript + Angular Js:
Wenn Sie auf OK klicken, wird der Löschvorgang ausgeführt, andernfalls nicht. * id ist der Parameter, Datensatz, den Sie löschen möchten.
quelle
Sie möchten nicht verwenden,
terminal: false
da dies die Verarbeitung innerhalb der Schaltfläche blockiert. Stattdessen in Ihremlink
das klarattr.ngClick
das Standardverhalten zu verhindern.http://plnkr.co/edit/EySy8wpeQ02UHGPBAIvg?p=preview
quelle
In der heutigen Zeit funktioniert diese Lösung für mich:
Credits: https://gist.github.com/asafge/7430497#file-ng-really-js
quelle
Ich habe genau dafür ein Modul erstellt, das auf dem modularen Dienst Angular-UI $ basiert.
https://github.com/Schlogen/angular-confirm
quelle
Eine Nur-Winkel-Lösung, die nebeneinander funktioniert,
ng-click
ist möglich, indem derng-click
Ausdruck mit compile umbrochen wird .Richtlinie:
HTML:
quelle
Code sagt alles
quelle
HTML 5 Codebeispiel
Codebeispiel für die benutzerdefinierte Richtlinie von AngularJ
quelle
Der Bestätigungsdialog kann mit AngularJS Material implementiert werden :
Implementierungsbeispiel: Winkelmaterial - Dialoge
quelle
Wenn Sie einen UI-Router verwenden, ersetzt die Schaltfläche Abbrechen oder Akzeptieren die URL. Um dies zu verhindern, können Sie in jedem Fall des bedingten Satzes false wie folgt zurückgeben:
quelle
Eine sehr einfache Winkellösung
Sie können id mit oder ohne Nachricht verwenden. Ohne Nachricht wird die Standardnachricht angezeigt.
Richtlinie
Regler
HTML
Mit einer Nachricht
Ohne eine Nachricht
quelle
Hier ist eine saubere und einfache Lösung Winkel Versprechen mit
$q
,$window
und nativer.confirm()
modal:Hier verwende ich
controllerAs
Syntax- und ES6-Pfeilfunktionen, aber es funktioniert auch in einfachem alten ES5.quelle
Löschen Sie das Bestätigungs-Popup mit dem Bootstrap in anglejs
Sehr einfach. Ich habe eine Lösung dafür mit der Verwendung von Bootstrap-Konformations-Popup. Hier bin ich zur Verfügung gestellt
im Bootstrap-Modell-Popup:
js
Wenn ich auf die Schaltfläche Löschen klicke, wird das Bootstrap-Popup zum Löschen der Konformation geöffnet und wenn ich auf Ja klicke, wird die Schaltflächenzeile gelöscht.
quelle
Ich wünschte, AngularJS hätte einen eingebauten Bestätigungsdialog. Oft ist es besser, einen benutzerdefinierten Dialog zu haben, als den eingebauten Browser zu verwenden.
Ich habe den Twitter-Bootstrap kurz verwendet, bis er mit Version 6 eingestellt wurde. Ich habe mich nach Alternativen umgesehen, aber die, die ich gefunden habe, waren kompliziert. Ich habe mich für die JQuery-Benutzeroberfläche entschieden.
Hier ist mein Beispiel, das ich aufrufe, wenn ich etwas aus dem ng-Gitter entfernen möchte.
Ich hoffe das hilft jemandem. Ich habe mir die Haare ausgezogen, als ich ui-bootstrap-tpls.js aktualisieren musste, aber es hat meinen bestehenden Dialog unterbrochen. Ich bin heute Morgen zur Arbeit gekommen, habe ein paar Dinge ausprobiert und dann festgestellt, dass ich zu kompliziert war.
quelle