Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重播不包含的主题';取消订阅时无法完成_Javascript_Angular_Rxjs - Fatal编程技术网

Javascript 重播不包含的主题';取消订阅时无法完成

Javascript 重播不包含的主题';取消订阅时无法完成,javascript,angular,rxjs,Javascript,Angular,Rxjs,我在Angular中有一个父组件,它创建了一个源于API调用的ReplaySubject。随着过滤器的改变和对新数据的新调用,这种情况会随着时间的推移而改变。此主题将传递给子组件,以便它们可以处理数据,并在过滤器更改和发出新数据时保持更新 // ParentComponent public tasksList = new ReplaySubject(1); queryParams.switchMap(params => apiCall(params)).subscribe(tasks =&

我在Angular中有一个父组件,它创建了一个源于API调用的ReplaySubject。随着过滤器的改变和对新数据的新调用,这种情况会随着时间的推移而改变。此主题将传递给子组件,以便它们可以处理数据,并在过滤器更改和发出新数据时保持更新

// ParentComponent
public tasksList = new ReplaySubject(1);
queryParams.switchMap(params => apiCall(params)).subscribe(tasks => tasksList.next(tasks));

// ParentComponent template
<task-list [tasks$]="tasksList"></task-list>

// TaskListComponent
tasksSub = tasks$.subscribe();
ngOnDestroy() { tasksSub.unsubscribe(); }
//父组件
公共任务列表=新的ReplaySubject(1);
queryParams.switchMap(params=>apiCall(params)).subscribe(tasks=>tasksList.next(tasks));
//父组件模板
//任务列表组件
tasksub=tasks$.subscribe();
Ngondestory(){tasksub.unsubscribe();}

我的问题是,当其中一个子组件被销毁并取消订阅主题时,它完成了主题,而新组件无法订阅。我如何才能共享主题并保持可重放性,同时还能销毁子组件?

你所描述的很奇怪,我刚刚创建了一个plnkr来测试它,而
主题
无法在
取消订阅
上完成,可能有另一行内容破坏了它。嗯,你说得对。我甚至把它通过一个子组件,它的行为是正确的。我已经用另一种方法解决了这个问题,在我将结束这个问题的讨论中,我可能会重复我看起来你在某个地方完成了这个主题,然后试图稍后订阅它:你所描述的很奇怪,我刚刚创建了一个plnkr来测试它,
主题
将无法在
取消订阅
上完成,可能有另一行代码打破了它。嗯,你是对的。我甚至把它通过一个子组件,它的行为是正确的。我已经用另一种方法解决了这个问题,使用中讨论的方法,我将结束这个问题可能重复的我看起来你在某个地方完成了这个主题,然后尝试稍后订阅它: