我的父母中有两个兄弟组件。兄弟姐妹需要互相交谈,因此我使用BehaviorSubject
的共享服务。
当我离开父母并返回时,订阅BehaviorSubject
,Component2
的组件似乎正在接收两组数据。
从我所知道的,它的最后一个集合,然后是Component1
告诉服务在第二次回到父级后调用next()
时收到的新集合。
在Component2
中,我有ngOnDestroy
方法在unsubscribe
上调用BehaviorSubject
。
我在这里遗失了什么?我是否需要在BehaviorSubject
方法中以某种方式清空或清除ngOnDestroy
中的内容?
这是第一次全部运行,它运行得很好。仅当BehaviorSubject
已经有数据发送两套时才会发生。
更新
我想我知道会发生什么,但我不是百分百肯定。当我第一次加载组件时,我订阅了使用BehaviorSubject
初始化的null
。 Component1
然后通过调用BehaviorSubject
进行首次调用,获取数据并更新next()
。
现在,当我们离开并返回时,Component2
正在重新订阅BehaviorSubject
,它会返回它拥有的最后一组数据,从而导致results
为{{1}并运行true
。在此过程中,fetchMapRules()
正在获取数据,当收到数据时,它会在Component1
上调用next
,然后发送第二个"新&#34}。数据集。
最好的解决办法是什么?将其更改为BehaviorSubject
,以便它不会保留以前的数据,或者在Subject
方法中调用next(null)
,这样当我们第二次回来时,我们之前没有数据订阅?
组件1(兄弟) - 版本:
ngOnDestroy()
组件2(兄弟) - 规则
mapVersionsData: any;
constructor(
private _mapsService: MapsService
) {}
ngOnInit() {
this.fetchMapVersions(1);
}
/*
Fetch a list of all the versions for the target we specified.
This method is only ever invoked the one time.
*/
fetchMapVersions(targetID) {
this._mapsService
.fetchMapVersions(targetID)
.then(versionsData => {
this.mapVersionsData = versionsData;
this._mapsService.updateCurrentSelectedVersion(this.mapVersionsData);
});
}
服务
mapRulesSubscription: Subscription;
constructor(
private _mapsService: MapsService
) {
this.mapRulesSubscription = this._mapsService.currentSelectedVersion$.subscribe(
results => {
if (results) {
// The two sets of data cause this method two run two times, passing it both sets of data which is obviously going to cause problems.
this.fetchMapRules(results['RuleVersionID']);
}
}
);
}
ngOnDestroy() {
this.mapRulesSubscription.unsubscribe();
}
思想?