angular - 加载组件后滚动到 Material Accordion 中的特定扩展面板

标签 angular typescript angular-material

我们正在尝试滚动到特定的 <mat-expansion-panel> <mat-accordion> 中的项目.问题是 ngAfterViewInit()在 Accordion 及其面板完全加载之前触发。这意味着 scrollIntoView()在加载 Accordion 时调用函数,之后页面大小发生变化,使我们的滚动操作将我们带到页面的错误位置。

我们还尝试了其他生命周期 Hook ,但没有帮助,因为它们都被提前调用了。有人对这个问题有什么好的做法吗?

我们的源代码很简单,因为我们正在尝试实现一些非常基本的东西:

landingpage.component.html

<mat-accordion>
   <mat-expansion-panel id="pangel-1">
    <mat-expansion-panel-header>
      <mat-panel-title>Lorem ipsum</mat-panel-title>
    </mat-expansion-panel-header>
    <p>
      Lorem ipsum dolor sit amet,
      consetetur sadipscing elitr,
      sed diam nonumy eirmod tempor invidunt...
    </p>
  </mat-expansion-panel>
  <mat-expansion-panel id="panel-2">
    <mat-expansion-panel-header>
      <mat-panel-title>Lorem ipsum</mat-panel-title>
    </mat-expansion-panel-header>
    <p>
      Lorem ipsum dolor sit amet,
      consetetur sadipscing elitr,
      sed diam nonumy eirmod tempor invidunt...
    </p>
  </mat-expansion-panel> 

  [ ... ] // more panels

</mat-accordion>

landingpage.component.ts

ngAfterViewInit() {
  this.scroll("panel-1");
}

scroll(id) {
  console.log(`scrolling to ${id}`);
  let el = document.getElementById(id);
  el.scrollIntoView();
}

最佳答案

这是关于 StackBlitz 的例子使用 Angular Material 7。你的技术工作正常,但你需要注意一些事情 - 确保页面足够长,以便面板可以位于页面顶部,并确保你不不要拼错面板的 ID。

关于angular - 加载组件后滚动到 Material Accordion 中的特定扩展面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53279563/

相关文章:

javascript - Angular 6 - Material 表 - 获取选定的行值

Angular 6 with Material,点击事件无法正常工作

javascript - 无法将动态 aria-label 值添加到 md-datepicker

javascript - 使用 Angular 5 调整 div 的高度和宽度(以百分比而非像素为单位)

css - 在 angular6 组件中使用动态 css

typescript - 记录类型反转器

typescript - JSPM 和 Typescript 导入

javascript - 在我的应用程序中添加 appRoutes 后未捕获的 TypeError : Cannot read property 'id' of undefined at registerNgModuleType (core. js)

angular - CORS 环境中未发送 Session-Cookie

java - mfp WL.Client.createSecurityCheckChallengeHandler() 或 WLAuthorizationManager.login() 中登录失败