我有一个问题,即组件被销毁并再次初始化后,所有观测立即一遍,他们燃煤摧毁之前进行发射相同的事件。
例如当前路由参数喜欢这里的监听器:
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
,似乎没有任何工作。
ActivatedRoute.params
是BehaviorSubject
所以它立即发出关于认购其最后的值。
如果你想忽略第一个值,你可以使用skip(1)
:
this.route.params.pipe(
skip(1),
takeUntil(this.alive),
).subscribe(params => console.log(params));