Angular 2中与a href="#someElementId"等效的方法

3

我正在使用:

gotoAbout() {
   this.router.navigate(['/'], { fragment: 'about' })
}

因为routerLink和a href="#about"会在我不在我的根/页面时重新加载我的页面。使用此函数在导航按钮上,它将在单击时导航到/#about而不重新加载页面,但问题是它根本没有像a href="#about"一样跳转到该div,当我从页面上滚动时。在Angular中有实现这个的方法吗?




Hacky 的代码也可以,但是在我的 (click) 路由器之前,这个 goToDiv 函数工作得好吗?路由器会将我带到 /#about 地址,导致整个页面的 <body> 部分展示 about 区块,因此该区块只有在路由完成后才会被渲染在 DOM 中。 - seanEd
你可以在Init函数中捕获该片段并运行goToDiv()。根据文档,你可以使用以下代码来实现更好的效果:this.router.navigate(['/results'], { fragment: 'top' }); - mickdev
我使用了一个组件,从ActivatedRoute中读取片段来确定在几个选项中显示什么内容,如果不是这样做的话,这将起作用:P现在我将尝试您的gotodiv解决方案。 - seanEd

0

对于任何感兴趣的人,我的解决方案如下:

我的导航栏有一个名为“关于”的按钮,它的点击事件是 (click)="gotoAbout();" :

  gotoAbout() {
    let tree = this.router.parseUrl(this.router.url);
    if (tree.fragment == 'about') {
      let element = document.querySelector("#" + tree.fragment);
      if (element) {
        element.scrollIntoView(element);
      }
    }
    else {
      this.router.navigate(['/'], {fragment: 'about'})
        .then( () => {
          let tree = this.router.parseUrl(this.router.url);
          let element = document.querySelector("#" + tree.fragment);
          if (element) {
            element.scrollIntoView(element);
          }
        });
    }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接