如何解决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();
}
其未订阅的OnDestroy
。
当我调用位于页脚组件中的pauseTaskProject()
时,它会调用data.service.ts中的pauseTaskProject()
pauseTaskProject
被调用,但没有在tasks.component.ts
中订阅
- 任务从任务页面(tasks.component.ts.li)开始
- 切换到其他页面并从页脚组件暂停任务。这没用
- 当我不使用退订时,它可以工作。但是如果未使用取消订阅,则多次订阅呼叫。
解决方法
由于缺少信息,很有可能在调用函数this.dataService.pauseTaskProject(taskData,type)
之后触发了订阅。可观察到Subject
的订阅会发出通知,该通知仅在订阅后被推送到。
如果需要将先前推入的值设为可观察值,则可以使用BehaviorSubject
或ReplaySubject
。我将以ReplaySubject
的缓冲区大小为1进行说明。它将保留/缓冲先前推入的值,并在订阅后立即将其发出。
import { ReplaySubject } from 'rxjs';
public pauseProjectTask$: ReplaySubject<any> = new ReplaySubject<any>(1);
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。