如何在服务中发出字符串并进入组件

时间:2017-05-27 09:19:54

标签: angular angular2-services angular2-directives

我想在util.service.ts处理一些错误时发出一个字符串,这样我就可以在app.component.ts中获取此消息并显示它,但我无法订阅发射器。   这是我的代码,但它不起作用:

在util.service.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;
  }
app.component.ts中的

我有这个:

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

任何人都可以帮助我吗?非常感谢

2 个答案:

答案 0 :(得分:0)

您可以将主题用作可观察,如下所示。

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

// app.component.ts

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

答案 1 :(得分:0)

突然间我通过制作一个静态的主题来解决这个问题:

util.service.ts:

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

app.component.ts:

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

并且不要忘记在app.module.ts中提供UtilService