2017-09-25 36 views
1

我們實現了自定義在我們的角4應用程序,它覆蓋默認的ErrorHandler,並顯示了錯誤模式的錯誤處理:角模態並不總是顯示正確

@Injectable() 
export class GlobalErrorCatcherService implements ErrorHandler { 
    constructor(private errorDispatcherService: ErrorDispatcherService) { } 

    public handleError(error: Error) { 
    this.errorDispatcherService.dispatchError(error); 
    } 
} 

跳過一些步驟,然後我們有一個ErrorDisplayService,它得到的信息有關錯誤,並顯示一個NgbModal,這是從@ NG-引導框架組件:

@Injectable() 
export class ErrorDisplayService { 
    constructor(private modalService: NgbModal) { 
    } 

    public showError(errorInformation: ErrorInformation): void { 
    const options = <NgbModalOptions>{ 
     backdrop: 'static', 
     keyboard: true 
    }; 

    const modalRef = this.modalService.open(ErrorDisplayContentComponent, options); 
    const componentInstance = <ErrorDisplayContentComponent>modalRef.componentInstance; 
    componentInstance.initialize(errorInformation); 
    } 
} 

不幸的是,這部作品的時間只有一半:預期的結果有時是正確的,例如:

enter image description here

但更多的,往往不是我們所得到的是類似的東西: enter image description here

我所有的修修補補沒有工作至今,我不能牽制的問題。我還有更多可能嘗試做這項工作嗎?

+0

我已經看到了類似的問題與出現的模態的背景,但不是模式,並已經注意到控制檯錯誤。你有沒有檢查控制檯是否有錯誤? –

回答

0

我決定以類似的方式實現錯誤處理程序,並面臨同樣的問題。通過使用調試器,我發現handleError()函數是由以外的Zone調用的,所以我認爲這可能是NgbModalWindow未正確呈現的原因。

我的解決方案是打開模式裏面zone。這有幫助。

試試這個:

  1. 注入到你的ErrorHandler實現NgZone。 (private zone: NgZone進入構造函數)或injector
  2. 包裝你this.errorDispatcherService.dispatchError(error);zone.run(() => this.errorDispatcherService.dispatchError(error));