我想创建一个自定义弹出窗口,以便在任何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
答案 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)));