我有一个问题,在组件被销毁并再次初始化之后,所有可观察对象立即立即再次发出相同的事件,这些事件在销毁之前被触发。
例如,一个监听当前路径参数的监听器,例如:
export class SomeComponent extends OnInit, OnDestroy {
private alive = new Subject<void>();
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.route.params
.pipe(takeUntil(this.alive))
.subscribe(params => console.log(params));
}
ngOnDestroy() {
this.alive.next();
this.alive.complete();
}
}
当我不断更改当前路由时,控制台会记录单个路由-这是正确的。但是,当我重定向到另一个路由器并且组件被破坏,然后再次返回时,我会立即得到类似的信息:
{param: 1}
{param: 3}
{param: 2} // <-- those 4 are previous history
{param: 1}
{param: 5} // this is what I go back into
看起来这些事件会一次又一次地触发。为什么会这样?我该如何解决?我尝试退订takeWhile
,似乎没有任何效果。
答案 0 :(得分:0)
ActivatedRoute.params
是BehaviorSubject
,因此它在订阅时立即发出其最后一个值。
如果要忽略第一个值,可以使用skip(1)
:
this.route.params.pipe(
skip(1),
takeUntil(this.alive),
).subscribe(params => console.log(params));