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
总是假的 - 为什么?
答案 0 :(得分:1)
在添加isExplicitNavigationBack
属性的commit中,您可以看到在调用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;
}
});