【发布时间】:2021-05-13 16:12:13
【问题描述】:
我有一个 MessageService 组件,用于在应用程序中的任何位置进行组件之间的交互,它们只使用注入的 MessageService 的 subscribe 和 sendMessage 方法。
当我用A加载页面时,可以交换B组件消息,但是由于使用另一个独立的可观察函数(HttpClient请求加载数据的http.get),MessageService主题订阅者从2减少到1。A和B无法交换消息。
我的问题是,我怎样才能知道后台发生了什么?
已更新 - 以下
当页面加载时没有问题,但在从网络加载一些数据之后。在 A 消息被触发但它没有到达 B
A. (its container has injected MessageService, and accessed by "this")
<file-export [fileExportInput]="this" *ngIf="hasExport"></file-export>
@Input()
fileExportInput: FileExportInputInterface;
ngOnInit() {
console.log("fileexport message service:", this.fileExportInput.messageService);
this.fileExportInput.messageService ? this.message = true : this.message = false;
if (this.message) {
this.message$ = {
next: (message: Message) => {
....
this.$subscription = this.fileExportInput.messageService.subscribe(this.message$);
}
}
B
constructor(private router: Router, private boeManagementService: BoeManagementService,
private translateService: TranslateService, public messageService: MessageService) {
console.log("boex message service:", this.messageService);
/** file-export */
this.message$ = {
next: (message: Message) => {
if (message.type === MessageType.FILE_EXPORT_ELEMENTS_REQUEST) { <---- CANT be reached this part
....
this.$subscription = this.messageService.subscribe(this.message$);
}
提前致谢,
沙巴
【问题讨论】:
-
如果您显示一些代码会更容易提供帮助。如果您可以在StackBlitz 上重现,那就更容易了 :-)
-
恐怕它会运作良好 - 因为它不应该发生,我需要一些提示如何使用控制台日志或 chrome 开发工具调试它,我看到它从 2 到 1 订阅但我不能了解更多信息。
-
组件订阅的服务上是否有公开的
messages$observable?当您说“无法交换消息”时,您的意思是 A 发送消息而 B 没有收到? -
MessageService pastebin.com/hEisA36r 来了,Q1:不,它是私有的,Q2:是的
-
能否也提供组件代码?是否使用
*ngIf控制任一消耗组件。也许组件被破坏导致取消订阅?也许第二个组件在消息发送后订阅,因此看起来它没有收到消息......
标签: angular rxjs subscription