我已经设置了这样一个可观察的模式,它通常可以工作,但是当我在自定义错误处理程序中使用它时它不起作用 .
显然构造函数中的代码永远不会被执行,但它是一个常规类,我不能使用onInit,不是吗?
编辑:我尝试将代码放在init函数中,该函数在订阅之前从对话框组件调用,但是当发生错误时,调用handleError,似乎上下文已经更改,并且没有定义任何内容(观察者和observable未定义)
自定义错误处理程序:
export class CustomErrorHandler implements ErrorHandler
{
public errors : Observable<Error>;
private errorsObserver : Observer<Error>;
constructor() {
this.errors = Observable.create((observer :Observer<Error>)=> <<<<<<THIS ONE NEVER GETS EXECUTED
{
this.errorsObserver = observer;
}).share();
}
handleError(error:Error) {
this.errorsObserver.next(error);
}
}
@NgModule({
providers: [{provide: ErrorHandler, useClass: CustomErrorHandler}]
})
export class CustomErrorHandlerModule {}
对话框组件:
@Component({
moduleId: module.id,
selector: 'dialog',
templateUrl: './dialog.component.html',
})
export class Dialog implements OnInit
{
private ErrorMsg: string;
public ErrorMessageIsVisible: boolean;
errorsSub:Subscription ;
constructor(private customErrorHandler: CustomErrorHandler) {
}
ngOnInit()
{
this.errorsSub = this.customErrorHandler.errors.subscribe(
(error) => {
this.showErrorMessage(error.message);
});
}
showErrorMessage(msg: string)
{
this.ErrorMsg = msg;
this.ErrorMessageIsVisible = true;
}
hideErrorMsg()
{
this.ErrorMessageIsVisible = false;
}
}
1 回答
我认为问题是你没有使用相同的CustomErrorProvider实例 .
您的提供程序是ErrorHandler:
在您的Dialog中,您必须注入ErrorHandler并强制转换为CustomErrorHandler: