如何让 Angular `routerLink` 片段导航滚动到我的 `id` 目标?

问题描述

有人可以帮我让 routerLink 片段滚动工作吗?

=> “工作”意味着当我点击 routerLink 时,它会滚动到具有匹配 ID 的元素。 ;)

我所做的代码示例:

<co-trigger routerLink="." [fragment]="item?.id" *ngFor="let item of items">Trigger</co-trigger>
...
<co-target [attr.id]="item?.id" *ngFor="let item of items">Target</co-target>

注意事项:

  • co-triggerco-target 都在同一个模板中。
  • 某些 co-target 实例具有足够的内容,因此有一个滚动条使通过单击触发器滚动到该项目有意义。
  • 导航栏中的 url 会按预期更改 url#item-id,但是单击触发器时不会发生滚动。

我的 AppRoutingModule 设置:

@NgModule({
  imports: [
    RouterModule.forRoot(
      routes,{
        onSameUrlNavigation: 'reload',anchorScrolling: 'enabled',scrollPositionRestoration: 'enabled',scrollOffset: [0,64],// [x,y] - adjust scroll offset
      }
    ),],exports: [RouterModule]
})
export class AppRoutingModule {
}

上下文信息:

Angular: 11.2.6

关于如何使“滚动到锚定目标功能起作用的任何想法?

解决方法

为此我使用了一个名为 ngx-page-scroll 的包。

,

你可以使用这样的东西。

第一步

所以每个元素你都可以定义一个名为 scroll 的方法,如下所示:

app.component.html

<a class="nav-link" (click)="scroll(home)">Link Name</a>

第 2 步

在同一个组件 app.component.html 中使用 ID #home 定义您的部分,如下所示:

<section #home>
...
</section>

步骤 3

现在在 app.component.ts 中,您可以像这样实现滚动方法:

scroll(el: HTMLElement) {

  el.scrollIntoView({ behavior: 'smooth' });

}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...