按 ID 标记 <A>引用元素的引用问题 #element

a reference problem with tag <a> reference element by id #element

提问人:Jorge 提问时间:9/7/2023 更新时间:9/7/2023 访问量:29

问:

请帮忙,

我的 HTML 文档中有一个 ID 的标签:

带有 ID 的标记

问题是,当我使用引用调用时,屏幕不会移动。引用调用:

我尝试两种方式,两者都不起作用:

方式1:

使用路由器链路和分段

方式2:

仅将 href 与 #id 一起使用

请帮忙

我尝试两种方式

我期待别人的其他方式

Angular Dom href

评论

0赞 OMANSAK 9/7/2023
方式 2 应该有效。示例 : stackblitz.com/edit/...
1赞 Robert 9/7/2023
请不要发布代码、错误、日志或其他文本的图像;请参阅如何提问

答:

0赞 Eliseo 9/7/2023 #1

看到当你导入 RouterModule.forRoot 时,你可以添加一个 “routerOptions”

在此函数中,您可以包含 routerOptions

const routerOptions: ExtraOptions = {
  scrollPositionRestoration: 'enabled',
  anchorScrolling: 'enabled', //<--this makes the trick
  scrollOffset: [0, 64], //<--this is for not just in the anchor
};

const routes: Routes = [ ...]

@NgModule({
  imports: [CommonModule, RouterModule.forRoot(routes, routerOptions)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

注:来源和鸣谢归 Quân Đỗ 所有。在此链接中,他展示了如何使锚点中的移动平稳,订阅 router.events 而不是使用 routerOptions

export class AppModule { 
  constructor(router: Router, viewportScroller: ViewportScroller) {
    viewportScroller.setOffset([0, 50]);
    router.events.pipe(filter(e => e instanceof Scroll)).subscribe((e: Scroll) => {
      if (e.anchor) {
        // anchor navigation
        /* setTimeout is the core line to solve the solution */
        setTimeout(() => {
          viewportScroller.scrollToAnchor(e.anchor);
        })
      } else if (e.position) {
        // backward navigation
        viewportScroller.scrollToPosition(e.position);
      } else {
        // forward navigation
        viewportScroller.scrollToPosition([0, 0]);
      }
    });
  }
}

评论

0赞 Jorge 9/9/2023
Eliseo感谢您的帮助。我在 routing.module 中使用了配置。