Наблюдаемый угловой таймер и повторное использование подписки между несколькими компонентами - PullRequest
0 голосов
/ 11 января 2019

У меня есть специальный сервис таймера, который добавляется в 2 компонента. Цель состоит в том, чтобы запустить таймер (настроенный с интервалом в 1 секунду) после инициализации компонента 1, записывать значение в консоль каждую секунду и переходить на другой маршрут после достижения значения, скажем, 50.

Перенаправление происходит правильно, когда я остаюсь в component 1 и позволяю времени истечь после 50. Но я не перенаправлен, если я по какой-то причине нахожусь в component 2. Таймер продолжает отсчитывать, пока не достигнет предела, но просто не разрешит перенаправление.

Ниже приведен код, который я пробовал до сих пор.

Таймер обслуживания

@Injectable()
export class TimerService {
    private readonly interval = 1000;
    private _timer$: Observable<number>;
    private _sub$: Subscription;

    constructor() {
        this._timer$ = timer(0, this.interval);
    }

    public get timer(): Observable<number> {
        return this._timer$;
    }

    public subscribe(fnExp: any): Subscription {
        if (!this._sub$) {
            this._sub$ = this._timer$.subscribe(fnExp);
        }
        return this._sub$;
    }

    public unsubscribe() {
        if (this._sub$) {
            this._sub$.unsubscribe();
        }
    }
}

Компонент 1 и Компонент 2

ngOnInit() {
    const timerSub$ = this._timerService.subscribe(x => {
      console.log(x);
      this.count = x;
      if (x === 50) {
        this._timerService.unsubscribe();
        console.log('stopped');
        this._router.navigate(['../'], {relativeTo: this._route});
      }
    });
  }

Так что эта строка this._router.navigate(['../'], {relativeTo: this._route}), похоже, не работает.

...