角度7:Observable未能发出事件

时间:2019-05-04 05:39:19

标签: angular7

我正在使用Observable实现组件通信,但是由于某种原因,我无法通过Observable订阅所发出的事件

服务代码:

import { Observable, Subject } from 'rxjs';
export class MessageService {
    private subject = new Subject<any>();

    sendMessage(message: string) { 
        console.log('sendMesg',message)
        this.subject.next({ text: message });
    }
    clearMessage() {
        this.subject.next();
    }

    getMessage(): Observable<any> {
        console.log("in Message");
        return this.subject.asObservable();
    }
}

组件1代码

  this.http.postMethod("report/PrintReport", data).subscribe((res: any) => {
          if (res.Message == 'Print Successfull') {
            this.messageService.sendMessage('Print Successfull');
            swal("Print Successfull..!", "", "success");

          } else {
            this.messageService.sendMessage('Print Failed');
            swal("Print Failed", "", "error");
          }
        }, err => {
          this.errorHandling.checkError(err.status);
        });

组件2代码:

    ngOnInit() {
    this.messageService.getMessage().subscribe(res =>{ 
    console.log('res', res); 
    }, err => {
    console.log('errrorr', err) })
    }

我能够从该服务记录sendMessage函数,但是我无法记录由getMessage订阅的component 2函数给出的结果

2 个答案:

答案 0 :(得分:1)

确保两个组件的提供者没有不同。您的服务应在两个组件的根模块中注册,它们可以共享同一服务实例

确保您已在app.module中注册了服务,以在组件之间共享公共实例。

答案 1 :(得分:0)

代替这个

getMessage(): Observable<any> {
        console.log("in Message");
        return this.subject.asObservable();
    }

您能使它成为简单的道具吗?

message$ = this.subject.asObservable();

并在其他组件中将其引用为

ngOnInit() {
    this.messageService.message$.subscribe(res =>{ 
    console.log('res', res); 
    }, err => {
    console.log('errrorr', err) })
    }

您可能在某处丢失了可观察的参考。