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

时间:2019-02-08 12:27:09

标签: angular rxjs angular6

我有一个问题,在组件被销毁并再次初始化之后,所有可观察对象立即立即再次发出相同的事件,这些事件在销毁之前被触发。

例如,一个监听当前路径参数的监听器,例如:

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

1 个答案:

答案 0 :(得分:0)

ActivatedRoute.paramsBehaviorSubject,因此它在订阅时立即发出其最后一个值。

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

this.route.params.pipe(
  skip(1),
  takeUntil(this.alive),
).subscribe(params => console.log(params));