Javascript 为什么在ngOnInit上调用ReplaySubject?
我试图在两个组件之间进行交互,即头部组件和路由器出口组件,其中包含反应形式。几天前,在做了大量研究之后,我得到了一个答案,它告诉我使用共享服务,并且有一个Javascript 为什么在ngOnInit上调用ReplaySubject?,javascript,angular,typescript,observable,angular9,Javascript,Angular,Typescript,Observable,Angular9,我试图在两个组件之间进行交互,即头部组件和路由器出口组件,其中包含反应形式。几天前,在做了大量研究之后,我得到了一个答案,它告诉我使用共享服务,并且有一个ReplaySubject变量。这将充当可观察的,它将在路由器出口中组件的ngOnInit中调用。所以问题就出现了。一切正常,但刚才测试时注意到一个小错误。单击页眉中的按钮后,事件将在主组件中触发,但它将保持活动状态,直到我硬重新加载页面。 下面是我的代码: shared.service.ts public updateSrc = new Re
ReplaySubject
变量。这将充当可观察的
,它将在路由器出口
中组件的ngOnInit
中调用。所以问题就出现了。一切正常,但刚才测试时注意到一个小错误。单击页眉中的按钮后,事件将在主组件中触发,但它将保持活动状态,直到我硬重新加载页面。
下面是我的代码:
shared.service.ts
public updateSrc = new ReplaySubject<any>(1);
public updateClick = this.updateSrc.asObservable();
main.component.ts(这里的主要操作发生在单击标题按钮时)
updateClicked=newsubject();
恩戈尼尼特(){
this.dataService.updateClick.pipe(takeUntil(this.updateClick)).subscribe({
下一步:value=>console.log(value);//在第一次单击按钮时,这种情况会完全发生,但是如果来自不同的路径&之前单击了标题按钮,则会触发这种情况
});
}
恩贡德斯特罗(){
this.updateClicked.next();//在此处关闭订阅
}
有人能给我建议如何重置吗?ReplaySubject(以及
Behavior Subject
)存储以前发出的值,并在添加新订户时发出这些值
如果您不希望新订户接收以前发出的值,则始终可以使用不存储发出的值的Subject
您可能需要阅读更多关于中可用变量的信息。ReplaySubject存储“当前”值。这意味着它会向新订户发送“旧”值。有没有办法破坏它?我正在关闭订阅,但它仍然是相同的属性。请确保您必须在
updateClicked
主题上调用complete()
,另外添加next()
以触发takeUntil
是的,我在那之后尝试了此操作,谢谢您的帮助
update() {
return this.dataService.updateSrc.next(true);
}
updateClicked = new Subject<any>();
ngOnInit() {
this.dataService.updateClick.pipe(takeUntil(this.updateClicked)).subscribe({
next: value => console.log(value); // At first click of button this happening perfectly but if coming from different route & had clicked the header button previously this thing is getting triggered
});
}
ngOnDestroy() {
this.updateClicked.next(); // Closing subscription here
}