Angular 4 Rxjs主题订阅不起作用



我有一个共享服务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中订阅

  1. 任务从任务页面启动,即tasks.component.ts
  2. 切换到其他页面并暂停页脚组件中的任务。它不起作用
  3. 当我不使用取消订阅时,它会起作用。但如果未使用unsubscribe,则subscribe会多次调用

由于缺乏信息,订阅很可能是在调用函数this.dataService.pauseTaskProject(taskData,type)之后触发的。对Subject可观察到的订阅会发出通知,这些通知仅在订阅之后推送到它。

如果您需要将先前推送的值添加到可观测值,则可以使用BehaviorSubjectReplaySubject。我将用缓冲区大小为1的ReplaySubject进行说明。它将保存/缓冲以前推送的值,并在订阅后立即发出。

import { ReplaySubject } from 'rxjs';
public pauseProjectTask$: ReplaySubject<any> = new ReplaySubject<any>(1);
...

最新更新