【问题标题】:Angular 7: Observable failed to emit an eventAngular 7:Observable 未能发出事件
【发布时间】:2019-05-17 18:17:41
【问题描述】:

我正在使用 Observable 实现组件通信,但不知何故我无法通过 observable 订阅 emmited 事件,请在下面找到我的代码

服务代码:

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 上订阅

【问题讨论】:

    标签: angular7


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      而不是这个,

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

      您可能在某处丢失了可观察的引用。

      【讨论】:

      • 我也面临同样的问题,而且我是 observables 的新手,所以你能详细说明一下答案吗?提前致谢
      • 我尝试了你的建议,但仍然是同样的问题,正如你所说,我可能会失去参考,但控制台需要打印对吗?不打印
      • @pradipshinde 你能检查一下 message$ 是什么吗?如果它是可观察的,您应该能够从中追踪主题。
      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2019-04-10
      • 2021-09-06
      • 2016-12-06
      相关资源
      最近更新 更多