Gibt es eine nicht so komplizierte Möglichkeit, einen Bestätigungsdialog in Winkel 2 zu erstellen ? Die Idee ist, auf ein Element zu klicken und dann ein Popup oder Modal anzuzeigen, um dessen Löschung zu bestätigen. Ich habe versucht, Winkel 2 Modale von hier Winkel 2 -Modal , aber Ich weiß nicht, wie ich das machen soll, wenn Sie bestätigen oder abbrechen, dass es etwas bewirkt. Die Klickfunktion funktioniert einwandfrei. Das einzige Problem ist, dass ich nicht genau weiß, wie ich sie verwenden soll. Ich habe auch ein anderes Modal mit dem gleichen Plugin mit dem Unterschied, den ich benutze.
this.modal.open(MyComponent);
Und ich möchte keine weitere Komponente erstellen, nur um ein Bestätigungsfeld anzuzeigen, deshalb frage ich.
Antworten:
Methode 1
Eine einfache Möglichkeit zur Bestätigung besteht darin, die Bestätigungswarnung des nativen Browsers zu verwenden. Die Vorlage kann eine Schaltfläche oder einen Link enthalten.
<button type=button class="btn btn-primary" (click)="clickMethod('name')">Delete me</button>
Und die Komponentenmethode kann wie folgt aussehen.
clickMethod(name: string) { if(confirm("Are you sure to delete "+name)) { console.log("Implement delete functionality here"); } }
Methode 2
Eine andere Möglichkeit, einen einfachen Bestätigungsdialog zu erhalten, besteht darin, die eckigen Bootstrap-Komponenten wie ng-bootstrap oder ngx-bootstrap zu verwenden . Sie können die Komponente einfach installieren und die modale Komponente verwenden.
Methode 3
Im Folgenden finden Sie eine weitere Möglichkeit, ein einfaches Bestätigungs-Popup zu implementieren,
angular2/material
das ich in meinem Projekt implementiert habe.app.module.ts
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ConfirmationDialog } from './confirm-dialog/confirmation-dialog'; @NgModule({ imports: [ ... FormsModule, ReactiveFormsModule ], declarations: [ ... ConfirmationDialog ], providers: [ ... ], bootstrap: [ AppComponent ], entryComponents: [ConfirmationDialog] }) export class AppModule { }
Bestätigungsdialog.ts
import { Component, Input } from '@angular/core'; import { MdDialog, MdDialogRef } from '@angular/material'; @Component({ selector: 'confirm-dialog', templateUrl: '/app/confirm-dialog/confirmation-dialog.html', }) export class ConfirmationDialog { constructor(public dialogRef: MdDialogRef<ConfirmationDialog>) {} public confirmMessage:string; }
Bestätigungsdialog.html
<h1 md-dialog-title>Confirm</h1> <div md-dialog-content>{{confirmMessage}}</div> <div md-dialog-actions> <button md-button style="color: #fff;background-color: #153961;" (click)="dialogRef.close(true)">Confirm</button> <button md-button (click)="dialogRef.close(false)">Cancel</button> </div>
app.component.html
<button (click)="openConfirmationDialog()">Delete me</button>
app.component.ts
import { MdDialog, MdDialogRef } from '@angular/material'; import { ConfirmationDialog } from './confirm-dialog/confirmation-dialog'; @Component({ moduleId: module.id, templateUrl: '/app/app.component.html', styleUrls: ['/app/main.css'] }) export class AppComponent implements AfterViewInit { dialogRef: MdDialogRef<ConfirmationDialog>; constructor(public dialog: MdDialog) {} openConfirmationDialog() { this.dialogRef = this.dialog.open(ConfirmationDialog, { disableClose: false }); this.dialogRef.componentInstance.confirmMessage = "Are you sure you want to delete?" this.dialogRef.afterClosed().subscribe(result => { if(result) { // do confirmation actions } this.dialogRef = null; }); } }
index.html => folgendes Stylesheet hinzugefügt
<link rel="stylesheet" href="node_modules/@angular/material/core/theming/prebuilt/indigo-pink.css">
quelle
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';
folgend verwendet habemd
mitmat
und vielleicht noch einige in Stile für Buttons gebaut verwenden:mat-raised-button color="primary"
Sie können window.confirm in Ihrer Funktion zusammen mit der if-Bedingung verwenden
Wenn Sie die Löschmethode aufrufen, wird eine Bestätigungsmeldung angezeigt. Wenn Sie auf OK klicken, wird die gesamte Logik innerhalb der if-Bedingung ausgeführt.
quelle
Ich bin ziemlich spät zur Party, aber hier ist eine andere Implementierung mit ng-bootstrap: https://stackblitz.com/edit/angular-confirmation-dialog
Bestätigungsdialog.service.ts
Bestätigungsdialog.Komponente.ts
Bestätigungsdialog.Komponente.html
Verwenden Sie den Dialog wie folgt:
quelle
UPDATE: Plunkr hinzugefügt
Ich habe in allen Foren nach einer Lösung gesucht, aber keine gefunden. Deshalb habe ich eine Lösung mit der Javascript-Rückruffunktion der alten Schule gefunden. Dies ist eine sehr einfache und übersichtliche Methode, um einen Bestätigungsdialog zu erstellen und Rückruffunktionen für JA- und NEIN- Klickereignisse festzulegen.
Ich habe Bootstrap CSS für Modal und An Alert Service mit rxjs Subject verwendet.
alert.component.html
<div *ngIf="message.type == 'confirm'" class="modal-body"> <div class="row"> <div class="col-md-12"> <h3 class="text-center">{{message.text}}</h3> </div> </div> <div class="row"> <div class="col-md-12"> <p class="text-center"> <a (click)="message.noFn()"> <button class="btn btn-pm">No</button> </a> <a (click)="message.siFn()"> <button class="btn btn-sc" >Yes</button> </a> </p> </div> </div> </div>
alert.component.ts
export class AlertComponent { message: any; constructor( public router: Router, private route: ActivatedRoute, private alertService: AlertService, ) { } ngOnInit() { //this function waits for a message from alert service, it gets //triggered when we call this from any other component this.alertService.getMessage().subscribe(message => { this.message = message; }); }
Der wichtigste Teil ist hier alert.service.ts
import { Injectable } from '@angular/core'; import { Router, NavigationStart } from '@angular/router'; import { Observable } from 'rxjs'; import { Subject } from 'rxjs/Subject'; @Injectable() export class AlertService { private subject = new Subject<any>(); constructor(){} confirm(message: string,siFn:()=>void,noFn:()=>void){ this.setConfirmation(message,siFn,noFn); } setConfirmation(message: string,siFn:()=>void,noFn:()=>void) { let that = this; this.subject.next({ type: "confirm", text: message, siFn: function(){ that.subject.next(); //this will close the modal siFn(); }, noFn:function(){ that.subject.next(); noFn(); } }); } getMessage(): Observable<any> { return this.subject.asObservable(); } }
Rufen Sie die Funktion von einer beliebigen Komponente aus auf
this.alertService.confirm("You sure Bro?",function(){ //ACTION: Do this If user says YES },function(){ //ACTION: Do this if user says NO })
Plunkr https://embed.plnkr.co/vWBT2nWmtsXff0MXMKdd/
quelle
Sie könnten sweetalert verwenden: https://sweetalert.js.org/guides/
Importieren Sie es dann einfach in Ihre Anwendung:
Wenn Sie zwei Argumente übergeben, ist das erste der Titel des Modals und das zweite der Text.
quelle
Hier ist eine etwas andere Einstellung, bei der die native Bestätigungsfunktion von Javascript und eine benutzerdefinierte Angular-Direktive verwendet werden. Es ist super flexibel und ziemlich leicht:
Verwendung:
<button (hrsAreYouSure) (then)="confirm(arg1)" (else)="cancel(arg2)"> This will execute confirm if user presses Ok on the confirmation dialog, or cancel if they hit Cancel </button>
Richtlinie:
import {Directive, ElementRef, EventEmitter, Inject, OnInit, Output} from '@angular/core'; @Directive({ selector: '[hrsAreYouSure]' }) export class AreYouSureDirective implements OnInit { @Output() then = new EventEmitter<boolean>(); @Output() else = new EventEmitter<boolean>(); constructor(@Inject(ElementRef) private element: ElementRef) { } ngOnInit(): void { const directive = this; this.element.nativeElement.onclick = function() { const result = confirm('Are you sure?'); if (result) { directive.then.emit(true); } else { directive.else.emit(true); } }; } }
quelle
Hinzufügen weiterer Optionen zur Antwort.
Du könntest benutzen
npm i sweetalert2
Vergessen Sie nicht, den Stil zu Ihrem hinzuzufügen
angular.json
Dann einfach importieren,
Boom, du bist bereit zu gehen.
Mehr dazu: - https://www.npmjs.com/package/sweetalert2
Ich hoffe das hilft jemandem.
Vielen Dank.
quelle
Um eine einzelne Implementierung des Bestätigungsdialogs in einer Anwendung mit mehreren Modulen wiederzuverwenden, muss der Dialog in einem separaten Modul implementiert werden. Hier ist eine Möglichkeit, dies mit Material Design und FxFlex zu tun, obwohl beide zurückgeschnitten oder ersetzt werden können.
Zuerst das gemeinsam genutzte Modul (./app.module.ts):
Und die Dialogkomponente (./confirmation-dlg.component.ts):
Dann können wir es in einem anderen Modul verwenden:
Der Klick-Handler der Komponente verwendet den folgenden Dialog:
Wenn
this.modal.open(MyComponent);
Sie nur das verwenden, was Sie getan haben, erhalten Sie kein Objekt zurück, dessen Ereignisse Sie abonnieren können. Deshalb können Sie es nicht dazu bringen, etwas zu tun. Dieser Code erstellt und öffnet einen Dialog, dessen Ereignisse wir abonnieren können.Wenn Sie CSS und HTML zurückschneiden, ist dies wirklich eine einfache Komponente. Wenn Sie sie jedoch selbst schreiben, haben Sie die Kontrolle über Design und Layout, während eine vorab geschriebene Komponente viel schwerer sein muss, um diese Kontrolle zu erhalten.
quelle