2017-05-27 11 views
0

util.service.tsがエラーを処理したときに文字列を出力したいので、app.component.tsでこのメッセージを取得して表示できます私はエミッタを購読できません。 これは私のコードですが、それは動作しません:サービスで文字列を出してコンポーネントを取得するにはどうすればいいですか

ngOnInit() { 
    this.utilService.getNavChangeEmitter() 
    .subscribe(data => { 
    this.errMsg = data; 
    }); 
    } 

誰も助けることができます:私はこれを持ってapp.component.tsで

export class UtilService { 
    errMsgEmitter = new EventEmitter(); 
    private handleError(error: Response | any) { 
    let errMsg: string; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body['error'] || JSON.stringify(body); 
     errMsg = `${error['status']} - ${error['statusText'] || ''} ${err}`; 
    } else { 
     errMsg = error['message'] ? error['message'] : error.toString(); 
    } 
    console.error(errMsg); 
    this.errMsgEmitter.emit(errMsg); 
    return Observable.throw(errMsg); 
    } 
    /** 
    * get event emitter 
    * @returns {EventEmitter<any>} 
    */ 
    getNavChangeEmitter() { 
    return this.errMsgEmitter; 
    } 

を:

util.service.tsに私?ありがとうございました

+0

この「handleError」関数はいつ呼び出されますか? – Alex

+0

@ AJT_82 httpサービスを必要とする人が –

+0

であり、他のサービスによって拡張されている場合、handleErrorはベースHTTPサービスで呼び出されます –

答えて

0

が突然、私は、静的な件名を作ることで、これを解決しapp.component.ts。 component.ts:

UtilService.errSubject 
     .subscribe(data => { 
     this.errMsg = data; 
     }); 

そして、app.module.tsのUtilServiceを提供することを忘れないでください。

0

件名観測可能以下のように使用できます。

util.service.ts:

static errSubject: BehaviorSubject<any> = new BehaviorSubject<any>(''); 

アプリ

import { Subject } from 'rxjs/Subject'; 

export class UtilService { 
    private message = = new Subject<string>(); 

    public errorMessage$ = this.message.asObservable(); 
    private error: string = ''; 

    private handleError(error: Response | any) { 
    this.error = ''; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body['error'] || JSON.stringify(body); 
     this.error = `${error['status']} - ${error['statusText'] || ''} ${err}`; 
    } else { 
     this.error = error['message'] ? error['message'] : error.toString(); 
    } 
    console.error(this.error); 
    this.message.next(this.error); 
    } 
} 

//は

ngOnInit() { 
    this.utilService.errorMessage$.subscribe(error => { 
    this.errMsg = error; 
    }); 
} 
+0

私はこの方法で試しましたが、 –

関連する問題