在我的应用程序中,我正在全局处理错误,如果我遇到任何错误,请打开 mat对话框以显示错误描述和代码。
问题是在打开对话框后几秒钟显示数据后显示为空, 我通过调试测试的数据可以正确发送,但是花时间显示错误描述和错误代码 这是正确处理全局错误的正确方法吗?
import {ErrorHandler,Injectable} from '@angular/core'
import { HttpErrorResponse } from '@angular/common/http';
import { errorDialog } from '..error-dialog/error-dialog.component';
import { MatDialogConfig, MatDialog } from '@angular/material';
@Injectable()
export class GlobalErrorHandler extends ErrorHandler{
constructor(private _dialog: MatDialog) {
super();
}
handleError(error: any) {
this.logError(error);
}
logError(error: any) {
if (error instanceof HttpErrorResponse) {
this.openGenericErrorDialog("BackEndErrorMessage",error.status);
}
else{
throw error;
}
}
openErrDialog(errMsg?: string,errCode?:number): void {
const dialogData = new MatDialogConfig();
dialogData.autoFocus = false;
dialogData.data = {
errorDescription: errMsg,
errorCode:errCode
};
if(dialogData.data){
this._dialog.open(errorDialog , dialogData);
}
}
}
我在errorDialog组件中添加了afterContentInit生命周期挂钩,在afterContentInit方法加载之后,将isLoad标志设置为true 在使用ngIf指令的html中,如果isLoad true则显示对话框内容。这按预期工作,但是当组件加载时显示一个小的空白对话框 如何在afterContentInit之后加载html内容?负载前如何限制
ErrorDialogComponent
import { Component, Inject,AfterContentInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
@Component({
selector : 'error-dialog',
templateUrl: './error-dialog.component.html',
styleUrls : ['./error-dialog.component.scss']
})
export class ErrorDialogComponent implements AfterContentInit
{
errorCode:string;
isLoaded:boolean=false;
constructor(
public dialogRef: MatDialogRef<ErrorDialogComponent>,
@Inject(MAT_DIALOG_DATA) data)
{
this.errorCode=data.errorCode;
this.errorDescription=data.errorDescription;
}
ngAfterContentInit(){
this.isLoaded=true;
}
}
<div *ngIf="isLoaded" >
{{errorDescription}}
</div>