2017-02-27 10 views
0

私はすでにこのような観測可能なパターンを設定していますが、通常は動作しますが、カスタムエラーハンドラで使用すると動作しません。angular2 - ストリーミングではありませんか?

コンストラクタ内のコードは決して実行されませんが、それは通常のクラスです。私はonInitを使用できません。

編集:サブスクリプションの前にダイアログコンポーネントから呼び出されたinit関数にコードを書き込もうとしましたが、エラーが発生したときにhandleErrorが呼び出され、コンテキストが変更され、何も定義されていません私は問題があると思い

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

答えて

0

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 {} 

ダイアログコンポーネント:)

カスタムエラーハンドラ定義されていませんCustomErrorProviderの同じインスタンスを使用していないことを示します。

あなたのプロバイダがErrorHandlerのである:あなたのダイアログで

@NgModule({ 
    providers: [{provide: ErrorHandler, useClass: CustomErrorHandler}] 
}) 

あなたはCustomErrorHandlerへのErrorHandlerとキャストを注入する必要があります。

constructor(errorHandler: ErrorHandler) { 
    this.customErrorHandler = errorHandler as CustomErrorHandler; 
    ... 
} 
+0

それは(観察可能なトリガを)動作しますが、私のダイアログが表示されません。 ..他のケースでは、ダイアログが機能するので、例外がスローされたときに、何らかの理由でフローが壊れたり、エラーが発生したりする可能性があります。 –

関連する問題