我不能在带有溢出自动功能的巢式迪瓦中使用锚并通过链接跳转到它.以下是我 case 的示例文件:

https://stackblitz.com/edit/stackblitz-starters-qaldie?file=src%2Fmain.ts

(在css中没有溢出设置,它可以工作)

我希望你能帮助我.

完整代码:完整代码:

import { Component, Input } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import {
  InMemoryScrollingFeature,
  InMemoryScrollingOptions,
  provideRouter,
  Route,
  RouterModule,
  withComponentInputBinding,
  withInMemoryScrolling,
} from '@angular/router';
import 'zone.js';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterModule],
  template: `
    <h1>Hello from {{ name }}!</h1>

<a routerLink="./" fragment="goto"> go to anchor </a>

<div class="scroll-container">
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>

  <div id="goto">lorem ipsum to goto</div>
</div>
  `,
  styles: `
  .scroll-container {
    height: 200px;
    overflow-y: auto;
  }

  #goto {
    background: red;
  }
  `,
})
export class App {
  name = 'Angular';
}

const APP_ROUTES: Route[] = [
  {
    path: '',
    redirectTo: 'sample-1',
    pathMatch: 'full',
  },
  {
    path: '**',
    redirectTo: 'sample-1',
  },
];

const scrollConfig: InMemoryScrollingOptions = {
  scrollPositionRestoration: 'top',
  anchorScrolling: 'enabled',
};

const inMemoryScrollingFeature: InMemoryScrollingFeature =
  withInMemoryScrolling(scrollConfig);

bootstrapApplication(App, {
  providers: [
    provideRouter(
      APP_ROUTES,
      withComponentInputBinding(),
      inMemoryScrollingFeature
    ),
  ],
});

推荐答案

从技术上讲,由于它在滚动容器中,因此它在视图端口中仍然可见,因此片段无法正常工作,如果您删除高度并滚动css,那么滚动将正常工作,对于这种情况,我们必须在元素的视图子项上使用scrollIntoView函数,以滚动到该元素,下面的工作示例

完整代码:完整代码:

import { Component, ElementRef, Input, ViewChild } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import {
  InMemoryScrollingFeature,
  InMemoryScrollingOptions,
  provideRouter,
  Route,
  RouterModule,
  withComponentInputBinding,
  withInMemoryScrolling,
} from '@angular/router';
import 'zone.js';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterModule],
  template: `
    <h1>Hello from {{ name }}!</h1>

<a (click)="clickEvent()" routerLink="./" > go to anchor </a>

<div class="scroll-container">
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>
  <div>lorem ipsum</div>

  <div id="goto" #goto>lorem ipsum to goto</div>
</div>
  `,
  styles: `
  .scroll-container {
    height: 200px;
    overflow-y: auto;
  }

  #goto {
    background: red;
  }
  `,
})
export class App {
  name = 'Angular';
  @ViewChild('goto') goto!: ElementRef<any>;

  clickEvent() {
    if (this.goto?.nativeElement) {
      this.goto.nativeElement.scrollIntoView();
    }
  }
}

const APP_ROUTES: Route[] = [
  {
    path: '',
    redirectTo: 'sample-1',
    pathMatch: 'full',
  },
  {
    path: '**',
    redirectTo: 'sample-1',
  },
];

const scrollConfig: InMemoryScrollingOptions = {
  scrollPositionRestoration: 'top',
  anchorScrolling: 'enabled',
};

const inMemoryScrollingFeature: InMemoryScrollingFeature =
  withInMemoryScrolling(scrollConfig);

bootstrapApplication(App, {
  providers: [
    provideRouter(
      APP_ROUTES,
      withComponentInputBinding(),
      inMemoryScrollingFeature
    ),
  ],
});

Stackblitz Demo

Angular相关问答推荐

为什么我的自定义.d.ts不起作用?LeaderLine不是构造函数

如何在构造函数中测试MatDialog.Open

带有搜索功能的CDK-VIRTUAL-SCROLL-VIEPORT不显示该值

使用Angular 13的NgxPrinterService打印时,第二页上的空白区域

Angular react 形式验证问题

所有返回缺少权限或权限不足的FireBase项目.

使用 Angular 类构造函数来获取依赖项

Angular Signals 如何影响 RXJS Observables 以及在这种情况下变化检测会发生什么

无法在 Angular 中使用 CryptoJS 正确加密

将 injectiontoken 用于 Angular 中的模块特定设置

如何在数据表angular material中显示空消息,如果未找到数据

如何停止在 ngOnInit() 之前调用的 ngOnChanges

如何在 ngFor 循环中创建变量?

在 Ionic 2 中使用 NodeJS.Timer 时找不到命名空间 NodeJS

Angular 5 Mat-grid 列表响应式

如何使用 Bootstrap 4 flexbox 填充可用内容?

导航到同一条route路由不刷新组件?

Angular 2 - ngfor 没有包装在容器中

Failed to execute 'setAttribute' on 'Element': ']' is not a valid attribute name

unexpected token < 错误