我正在做这样的事情
ngOnInit() {
this.router.events.subscribe((evt) => {
if (!(evt instanceof NavigationEnd)) {
return;
}
window.scrollTo(0, 0);
});
因为我想在每次用户导航时滚动到页面顶部。有趣的部分是NavigationEnd
在解析下一页的数据之前触发。所以它首先滚动到顶部(在同一页面上),而不是等待服务器(100ms左右)而不是显示新页面。这真的很奇怪。文档说NavigationEnd
为An event triggered when navigation ends successfully.
在下一页准备好显示之后,不应该导航到最后一件事吗?
https://angular.io/guide/router#router-events
所以有人知道我应该使用什么吗?
答案 0 :(得分:0)
实际上它引发了一些NavigationEnd事件,所以你需要像这样指定你需要的确切url
!(val instanceof NavigationEnd && val.url !== '/home')
我们使用不同的策略。如果你log
这个事件,你会发现它在获取你的页面之前会提供很多事件。
答案 1 :(得分:0)
我知道这个主题有点古老,但是由于Angular 6.x,您可以使用:
RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled'})
在您的情况下,您可能需要将其设置为“ top”。其他附加选项可以在https://angular.io/api/router/ExtraOptions
中找到据我了解,NavigationEnd是在重定向实际发生之前触发的。它包含请求的URL和最终URL(urlAfterRedirects),提供有关应用程序如何处理请求的信息。