通过CustomErrorHandler发生错误时显示自定义消息

时间:2017-10-10 20:11:14

标签: angular error-handling http-status-code-404

我想创建一个自定义弹出窗口,以便在任何storage_path到来时通知用户并显示自定义消息。为此,我创建了一个自定义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; } } 的类。通过方法error status,我将确定是否有必要显示消息。当然,我已将getStatus添加到app.module部分必填字段中。

providers - 我的主app.component.html我添加了

component

将显示错误。

那么主要问题是如何以最佳方式实施我的<error-handler></error-handler> ?首先,我考虑了构造函数error-handler component的{​​{1}},但后来我发现injecting永远不会改变。所以请建议我或告诉我如何正确地做到这一点。

现在我只是向班级注入我的服务:

errorHandlerService

1 个答案:

答案 0 :(得分:1)

  

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);
  }
}

我添加了一些服务更改。

  

只要服务处于使用状态或以其他方式销毁,status现在就可以存储最后一个值。

     

getStatus()方法现在返回Observable,这意味着您可以subscribe,而Angular会跟踪更改

return this.http.get("url")
      .map((res) => res.json() as Class)
      .catch((err: Response) => Observable.throw(youmethod(err)));