我正在尝试使用Subject
在两个组件之间进行通信private onAdd = new Subject<any>();
onAdd$ = this.onAdd.asObservable();
this.onAdd.next(event);
这些我写的服务:
我正在ngOninit
中的其他组件中这样听this.service.onAdd$.subscribe((alert) => {
console.log('Component--- ' + alert);
});
两件事:
所以,我可以保证我的活动没有传达给其他组件,我无法弄清楚问题是什么。任何人都可以帮助我。
答案 0 :(得分:0)
除非您使用'ReplaySubject'或'BehaviorSubject',否则如果在组件订阅主题之前调用'next'方法,则在再次调用下一个方法之前,它将不会接收任何数据。
编辑 - 尝试这个简单的工作插件示例 - http://plnkr.co/edit/34Zj0QB5chEYj7g1vRmN
在plunkr中,您可以看到如果在订阅之前多次递增该值,则当您使用ReplaySubject点击订阅按钮时,您的组件将自动接收最后一个值。使用普通主题时,在您订阅时,只有再次单击“增量”按钮后才会显示该值。
如果你打电话
this.onAdd.next(event);
在组件订阅它之后,它应该再次接收数据。
或尝试更改为重播主题,因此主题将在收到新订阅者时发送最后一个发布的值
private onAdd = new ReplaySubject<any>();
请确保将其导入
import { ReplaySubject } from 'rxjs/ReplaySubject';
答案 1 :(得分:0)
尝试像这样重构您的服务。 myService.service.ts
class MyService {
private onAdd = new Subject<any>();
sendonAdd(value) {
this.onAdd.next(value);
}
getonAdd(){
return this.onAdd.asObservable();
}
}
现在在组件中注入此服务,您希望通过调用sendonAdd()来设置onadd值。在另一个组件中调用getonAdd()并订阅它。希望这可以帮助!如果有,请接受我的回答。