如何清除第二个组件的init rxjs流事件

问题描述 投票:0回答:1

我有一个问题,即组件被销毁并再次初始化后,所有观测立即一遍,他们燃煤摧毁之前进行发射相同的事件。

例如当前路由参数喜欢这里的监听器:

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,似乎没有任何工作。

angular rxjs angular6
1个回答
0
投票

ActivatedRoute.paramsBehaviorSubject所以它立即发出关于认购其最后的值。

如果你想忽略第一个值,你可以使用skip(1)

this.route.params.pipe(
  skip(1),
  takeUntil(this.alive),
).subscribe(params => console.log(params));
© www.soinside.com 2019 - 2024. All rights reserved.