通过 Custom ErrorHandler 出现错误时显示自定义消息
Displaing custom message when error comes through CustomErrorHandler
我想创建一个自定义弹出窗口,以便在 http error
出现时通知用户并显示自定义消息。为此,我创建了一个自定义 event handler
,如下所示:
@Injectable()
export class CustomErrorHandler extends ErrorHandler {
constructor(private errorHandlerService: ErrorHandlerService){
super(false);
}
public handleError(error: any): void {
super.handleError(error);
if (error.status == 500){
this.errorHandlerService.setStatus = error.status;
alert('error 500');
}
}
}
此外,我创建了一个只有一个属性的 service
- status
:
@Injectable()
export class ErrorHandlerService {
private status: any;
get getStatus(){
return this.status;
}
set setStatus(status : any){
this.status = status;
}
}
所以这是一个 class 保持电流 error status
。通过方法 getStatus
我将确定是否有必要显示消息。当然,我已经在 app.module
中添加了 providers
部分必要的字段。
在app.component.html
-我的主要component
我添加了
<error-handler></error-handler>
会显示错误
所以主要问题是如何以最佳方式实施我的 error-handler component
?首先我想 injecting
到构造函数我的 errorHandlerService
但后来我认识到 status
永远不会改变。所以请给我建议或告诉我如何正确地做。
现在我只是注入 class 我的服务:
@Component({
selector: 'error-handler',
templateUrl: './error-handler.component.html',
styleUrls: ['./error-handler.component.css']
})
export class ErrorHandlerComponent implements OnInit {
showErrorMessage = false;
constructor(private errorHandlerService: ErrorHandlerService) {}
ngOnInit() {}
}
.html
<h1 *ngIf="showErrorMessage ">Error appears!</h1>
app.component.html
通过将 <error-handler></error-handler>
添加到此文件,它可以随时在全球范围内使用。
<ng-container *ngIf="showErrorMessage">
<h1>Error handler container</h1>
<error-handler></error-handler>
</ng-container>
<router-outlet></router-outlet>
app.component.ts
constructor(private errorHandlerService: ErrorHandlerService, private cd: ChangeDetectorRef) {}
showErrorMessage = false;
ngOnInit() {
this.errorHandlerService.getStatus().subscribe((err: any) => {
if (err != "200") {
showErrorMessage = true;
} else {
showErrorMessage = false;
}
this.cd.markForCheck();
});
}
ErrorHandlerService
@Injectable()
export class ErrorHandlerService {
private status: Subject<any> = new Subject();
getStatus(): Observable<any>{
return this.status.asObservable();
}
setStatus(status : any){
this.status.next(status);
}
}
我对服务添加了一些更改。
The status
can now store the last value as long as the service is in used or otherwise destroyed.
getStatus()
method now returns a Observable
which means you can subscribe
to it and Angular will track for changes
return this.http.get("url")
.map((res) => res.json() as Class)
.catch((err: Response) => Observable.throw(youmethod(err)));
我想创建一个自定义弹出窗口,以便在 http error
出现时通知用户并显示自定义消息。为此,我创建了一个自定义 event handler
,如下所示:
@Injectable()
export class CustomErrorHandler extends ErrorHandler {
constructor(private errorHandlerService: ErrorHandlerService){
super(false);
}
public handleError(error: any): void {
super.handleError(error);
if (error.status == 500){
this.errorHandlerService.setStatus = error.status;
alert('error 500');
}
}
}
此外,我创建了一个只有一个属性的 service
- status
:
@Injectable()
export class ErrorHandlerService {
private status: any;
get getStatus(){
return this.status;
}
set setStatus(status : any){
this.status = status;
}
}
所以这是一个 class 保持电流 error status
。通过方法 getStatus
我将确定是否有必要显示消息。当然,我已经在 app.module
中添加了 providers
部分必要的字段。
在app.component.html
-我的主要component
我添加了
<error-handler></error-handler>
会显示错误
所以主要问题是如何以最佳方式实施我的 error-handler component
?首先我想 injecting
到构造函数我的 errorHandlerService
但后来我认识到 status
永远不会改变。所以请给我建议或告诉我如何正确地做。
现在我只是注入 class 我的服务:
@Component({
selector: 'error-handler',
templateUrl: './error-handler.component.html',
styleUrls: ['./error-handler.component.css']
})
export class ErrorHandlerComponent implements OnInit {
showErrorMessage = false;
constructor(private errorHandlerService: ErrorHandlerService) {}
ngOnInit() {}
}
.html
<h1 *ngIf="showErrorMessage ">Error appears!</h1>
app.component.html
通过将 <error-handler></error-handler>
添加到此文件,它可以随时在全球范围内使用。
<ng-container *ngIf="showErrorMessage">
<h1>Error handler container</h1>
<error-handler></error-handler>
</ng-container>
<router-outlet></router-outlet>
app.component.ts
constructor(private errorHandlerService: ErrorHandlerService, private cd: ChangeDetectorRef) {}
showErrorMessage = false;
ngOnInit() {
this.errorHandlerService.getStatus().subscribe((err: any) => {
if (err != "200") {
showErrorMessage = true;
} else {
showErrorMessage = false;
}
this.cd.markForCheck();
});
}
ErrorHandlerService
@Injectable()
export class ErrorHandlerService {
private status: Subject<any> = new Subject();
getStatus(): Observable<any>{
return this.status.asObservable();
}
setStatus(status : any){
this.status.next(status);
}
}
我对服务添加了一些更改。
The
status
can now store the last value as long as the service is in used or otherwise destroyed.
getStatus()
method now returns aObservable
which means you cansubscribe
to it and Angular will track for changes
return this.http.get("url")
.map((res) => res.json() as Class)
.catch((err: Response) => Observable.throw(youmethod(err)));