Доступ isExplicitNavigationBack от маршрутизатора: навигация: завершить событие
Aurelia не выполняет автоматическую прокрутку браузера до верхней части страницы после перехода на новый маршрут, поэтому я легко решил эту проблему с помощью EventAggregator
, слушая router:navigation:complete
событие в моей главной App
учебный класс (app.js
):
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class App {
constructor (ea) {
this.ea = ea;
this.ea.subscribe('router:navigation:complete', e => {
document.body.scrollTop = document.documentElement.scrollTop = 0;
});
}
}
Я недавно заметил isExplicitNavigationBack
свойство на маршрутизаторе, которое было бы чрезвычайно полезно для предотвращения прокрутки сверху при переходе пользователя назад, однако свойство всегда false
, Я пытался с кнопкой назад, а также Router.navigateBack()
,
Я надеялся просто изменить обратный вызов моей подписки следующим образом:
if (!e.instruction.router.isExplicitNavigationBack) {
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
Но, к сожалению isExplicitNavigationBack
всегда ложно - почему?
1 ответ
В коммите добавление isExplicitNavigationBack
свойство, которое вы можете увидеть, что значение установлено в true
при звонке router.navigateBack()
но это установлено обратно false
на resolveInstruction
,
Поскольку вы подписались на router:navigation:complete
событие, маршрутизация уже завершена, и поэтому значение возвращается к false
, Если вы подписались на router:navigation:processing
событие должно быть true
если ты позвонишь router.navigateBack()
,
this.ea.subscribe('router:navigation:processing', e => {
if (!e.instruction.router.isExplicitNavigationBack) {
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
});