Angular Material:如何在注销时关闭所有mat-dialogs和sweet-alert

Sri*_*ri7 14 angular-material ng-bootstrap angular sweetalert2

我想在Angular中注销时关闭所有对话框(mat-dialog,bootstrap modals和sweet alert).这是在AngularJS(版本1.5)中完成的方式:

function logout() {
  //hide $mdDialog modal
  angular.element('.md-dialog-container').hide();

  //hide any open $mdDialog modals & backdrop
  angular.element('.modal-dialog').hide();
  angular.element('md-backdrop').remove();

  //hide any open bootstrap modals & backdrop
  angular.element('.inmodal').hide();
  angular.element('.fade').remove();

  //hide any sweet alert modals & backdrop
  angular.element('.sweet-alert').hide();
  angular.element('.sweet-overlay').remove();
}
Run Code Online (Sandbox Code Playgroud)

我怎么能在Angular中做到这一点?使用$('.mat-dialog-container')$('.inmodal')不给我一个选择hide()或做close()

我尝试过这样做,但我无法获得元素参考:

import { ElementRef, Injectable, ViewChild } from '@angular/core';
import { MatDialog, MatDialogContainer, MatDialogRef } from '@angular/material';

export class MyClass
{
  @ViewChild('.mat-dialog-container') _matDialog: ElementRef;
  @ViewChild('.mat-dialog-container') _matDialogRef:MatDialogRef<MatDialog>;

  constructor() { }

  function logout()
  {
    //access the dialogs here
  }
}
Run Code Online (Sandbox Code Playgroud)

Sri*_*ri7 27

这就是我mat-dialog在整个应用程序中关闭任何打开的方法:

import {MatDialog} from '@angular/material';

export class myClass {

constructor(private dialogRef: MatDialog) {
}

logOut()
{
  this.dialogRef.closeAll();
}

}
Run Code Online (Sandbox Code Playgroud)

如果只想关闭特定对话框,可以循环使用dialogRef.openDialogs并关闭相应的对话框close()

这是您关闭任何打开/活动甜蜜警报对话框的方法:

const sweetAlertCancel = document.querySelector('.swal2-cancel') as HTMLElement;

if (sweetAlertCancel) {
    sweetAlertCancel.click(); //only if cancel button exists
}

const sweetAlertConfirm = document.querySelector('.swal2-confirm') as HTMLElement;

if (sweetAlertConfirm) {
   sweetAlertConfirm.click(); //if cancel doesn't exist , confirm is the equivalent for Ok button
}
Run Code Online (Sandbox Code Playgroud)

material-dialog没有可用于关闭或隐藏所有打开甜蜜警报对话框的方法不同.这是我到目前为止所能做到的.


fin*_*nki 5

对于任何寻找答案的人,如果方法.closeAll()不可用DialogRef(例如,如果使用较新的@angular/material组件):

import {MatDialog} from '@angular/material/dialog';

constructor(matDialog: MatDialog) {…}

logout() {
    this.matDialog.closeAll();
}
Run Code Online (Sandbox Code Playgroud)

  • ..如果你想在所有对话框关闭后执行某些操作,你应该使用 `this.matDialog.afterAllClosed.pipe(take(1)).subscribe(() =&gt; doSomething())` (2认同)