角度行为主题重复数据问题

时间:2017-09-16 18:26:56

标签: angular typescript rxjs

我的父母中有两个兄弟组件。兄弟姐妹需要互相交谈,因此我使用BehaviorSubject的共享服务。

当我离开父母并返回时,订阅BehaviorSubjectComponent2的组件似乎正在接收两组数据。

从我所知道的,它的最后一个集合,然后是Component1告诉服务在第二次回到父级后调用next()时收到的新集合。

Component2中,我有ngOnDestroy方法在unsubscribe上调用BehaviorSubject

我在这里遗失了什么?我是否需要在BehaviorSubject方法中以某种方式清空或清除ngOnDestroy中的内容?

这是第一次全部运行,它运行得很好。仅当BehaviorSubject已经有数据发送两套时才会发生。

更新我知道会发生什么,但我不是百分百肯定。当我第一次加载组件时,我订阅了使用BehaviorSubject初始化的nullComponent1然后通过调用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();
}

思想?

0 个答案:

没有答案