У меня есть специальный сервис таймера, который добавляется в 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})
, похоже, не работает.