在为下一页Angular解析数据之前触发NavigationEnd

时间:2018-04-02 11:54:37

标签: angular

我正在做这样的事情

ngOnInit() {
  this.router.events.subscribe((evt) => {
  if (!(evt instanceof NavigationEnd)) {
    return;
  }
  window.scrollTo(0, 0);
});

因为我想在每次用户导航时滚动到页面顶部。有趣的部分是NavigationEnd在解析下一页的数据之前触发。所以它首先滚动到顶部(在同一页面上),而不是等待服务器(100ms左右)而不是显示新页面。这真的很奇怪。文档说NavigationEndAn event triggered when navigation ends successfully.在下一页准备好显示之后,不应该导航到最后一件事吗?

https://angular.io/guide/router#router-events

所以有人知道我应该使用什么吗?

2 个答案:

答案 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),提供有关应用程序如何处理请求的信息。