Проверьте текущий компонент после тайм-аута - PullRequest
0 голосов
/ 07 июня 2018

Я нахожусь в компоненте с именем "recoger_success", и я хочу, чтобы он перешел к домашнему компоненту через 10 секунд после нажатия кнопки, с которой был связан обратный отсчет ().Проблема в том, что если я перейду к другому компоненту до того, как тайм-аут достигнет 0, то через 10 секунд не имеет значения, к какому компоненту я принадлежу, он всегда перейдет к домашнему компоненту.Я не хочу этого, я хочу, чтобы он только переходил к домашнему компоненту, если пользователь все еще находится на компоненте тайм-аута, в противном случае игнорируйте его ..

Я пробовал это, чтобы узнать URL фактического компонента, ноне работает ..

countdown(){
  setTimeout(() => {
    if (this.route.snapshot.url.toString() == 'recoger_success'){
        this.router.navigate([""]);
    }
  }, 10000);

}

признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вам необходимо привязать setTimeout к переменной.

component.ts

import { Component, OnDestroy } from '@angular/core';

export class Component implements OnDestroy {

  countdownTimer: any;

  countdown() {
    if (this.countdownTimer) {
      clearInterval(this.countdownTimer);
    }
    this.countdownTimer = setTimeout(() => {
      if (this.route.snapshot.url.toString() == 'recoger_success') {
        this.router.navigate([""]);
      }
    }, 10000);
  }


  ngOnDestroy() {
    if (this.countdownTimer) {
      clearInterval(this.countdownTimer);
    }
  }
}
0 голосов
/ 07 июня 2018

Назначьте тайм-аут переменной, и в то время, когда вы вручную создаете страницу, сбросьте тайм-аут

countdown(){
  this.timeout = setTimeout(() => {
    if (this.route.snapshot.url.toString() == 'recoger_success'){
        this.router.navigate([""]);
    }
  }, 10000);
}

function myStopFunction() {
    clearTimeout(this.timeout);
}
...