0

我正在使用 angular-user-idle npm 包来跟踪浏览器的非活动状态并在预设的 timeout 上显示会话弹出弹出窗口。当您在超时时不从该特定组件重定向时,该库运行良好。当您重定向到主页或类似页面并重新输入相同的较早组件时,如果这次发生超时,弹出窗口现在会出现多次。

现在为了向您解释这一点,我在下面的屏幕截图中显示了第一次加载组件和第二次加载组件期间的计数器编号。如果您仔细查看每个计数器的第二个图像编号是否出现了两次。是什么原因导致弹出多次出现?我怎样才能避免它?

在此处输入图像描述

在此处输入图像描述

  ngOnInit() {

//Start watching for user inactivity.
this.restart();
this.userIdle.startWatching();


// Start watching when user idle is starting.
this.userIdle.onTimerStart().subscribe(count => console.log(count));

// Start watch when time is up.
this.userIdle.onTimeout().subscribe(() => {

  this.openGenericDialog('GenericAlert', "Your session is expired!");


  this.dialogRef.afterClosed().subscribe(
    result => {
      this.dialogResult = result;

      this.stopWatching()
      this.stop();

      this.createUpdateLoggedInRecord('Simulation', 
this.varUser.UserKeyID, false);
      this.router.navigateByUrl('/authentication');
    });

}

);


  }

  stop() {
this.userIdle.stopTimer();
  }

  stopWatching() {
this.userIdle.stopWatching();
  }

  restart() {
this.userIdle.resetTimer();
  }
4

1 回答 1

1

认为您可能有内存泄漏,因为您没有跟踪您的订阅。

this.userIdle.onTimeout().subscribe(() => {
...

^^ 这个。

应该是这个(vv)

this.userIdle.onTimeout()
    .pipe(take(1))
    .subscribe(() => {
    ...
于 2019-10-16T19:02:04.110 回答