我有一个共享服务data.service.ts
,它有
public pauseProjectTask$: Subject<any> = new Subject<any>();
pauseTaskProject(taskData,type){
this.pauseProjectTask$.next(taskData);
}
我有一个footer.component.ts
,它显示了每个页面中当前活动的任务,任务可以从页脚组件暂停。我在页脚有一个暂停功能。
pauseTask(taskData,type){
console.log(taskData,type);
this.pauseTaskSub = this.dataService.pauseTaskProject(taskData,type);
}
我还有一个列出所有任务的组件。task.component.ts
。它监听任务状态的变化。
this.pauseProjectTaskSub = this.dataService.pauseProjectTask$.subscribe(taskData => {
this.changesTaskStatus('','pause',taskData);
});
ngOnDestroy(){
this.pauseProjectTaskSub.unsubscribe();
}
其未订阅的CCD_ 4。
当我调用页脚组件中的pauseTaskProject()
时,它调用data.service.ts 中的pauseTaskProject()
调用了pauseTaskProject
,但未在tasks.component.ts
中订阅
- 任务从任务页面启动,即tasks.component.ts
- 切换到其他页面并暂停页脚组件中的任务。它不起作用
- 当我不使用取消订阅时,它会起作用。但如果未使用unsubscribe,则subscribe会多次调用
由于缺乏信息,订阅很可能是在调用函数this.dataService.pauseTaskProject(taskData,type)
之后触发的。对Subject
可观察到的订阅会发出通知,这些通知仅在订阅之后推送到它。
如果您需要将先前推送的值添加到可观测值,则可以使用BehaviorSubject
或ReplaySubject
。我将用缓冲区大小为1的ReplaySubject
进行说明。它将保存/缓冲以前推送的值,并在订阅后立即发出。
import { ReplaySubject } from 'rxjs';
public pauseProjectTask$: ReplaySubject<any> = new ReplaySubject<any>(1);
...