我正在使用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
函数给出的结果
答案 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) })
}
您可能在某处丢失了可观察的参考。