Мне нужно реализовать тайм-аут в моем приложении, если на странице нет активности пользователя. Я перенаправляю пользователя на домашнюю страницу, это означает, что мне нужно прервать режим ожидания в какой-то момент, когда одно из событий срабатывает, например, щелчок или наведение мыши.
Я решил использовать ng-idle для этой цели. Мое приложение состоит из множества страниц, и я хочу, чтобы на всех них было время ожидания, поэтому я вставил код простоя пользователя в компонент страницы, который расширяется каждым другим компонентом.
В моем приложении есть файл rout.module.ts, который определяет порядок маршрутизации для всех страниц.
Проблема в том, что onIdleEnd работает только для первой страницы в маршрутизации, на всех других страницах onTimeout начинает обратный отсчет, но не останавливается на событиях, которые я определил. На первой странице работает нормально, останавливается и сбрасывается.
Вот код из конструктора в компоненте страницы:
Конструктор (
private idle: Idle,
private keepalive: Keepalive,
private stateDataService: AppStateDataService,
private dbService: InMemoryDbManagerService,
private router?: Router
) {
idle.setIdle(5);
idle.setTimeout(5);
scrolls, touches to the document
idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);
idle.onIdleEnd.subscribe(() => {this.idleState = 'No longer idle.',console.log("onIdleEnd")});
idle.onTimeout.subscribe(() => {
this.idleState = 'Timed out!';
this.timedOut = true;
this.router.navigate(['/']);
console.log("onTimeout")
});
idle.onIdleStart.subscribe(() => {this.idleState = 'You\'ve gone idle!',console.log("onIdleStart")});
idle.onTimeoutWarning.subscribe((countdown) => {this.idleState = 'You will time out in ' + countdown + ' seconds!',console.log(countdown)});
keepalive.interval(15);
keepalive.onPing.subscribe(() => this.lastPing = new Date());
}
сброс () {
this.idle.watch();
this.idleState = 'Started.';
this.timedOut = false;
}
ngOnInit () {
this.reset();
}
В попытался добавить
ngOnInit () {
this.reset();
}
в каждом компоненте, вместо добавления его только в компонент страницы, он не работал эфиром.
Что я делаю не так?
Спасибо.