Доступ 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;
  }
});
Другие вопросы по тегам