滚动到材质扩展面板的视图而不禁用动画

yan*_*rab 3 angular-material angular

scrollIntoView当a打开时我打电话MaterialExpansionPanel

opened(i) {
    setTimeout(() =>
        this.panels.toArray()[i].nativeElement.scrollIntoView({ behavior: 'smooth' }
    ));
}
Run Code Online (Sandbox Code Playgroud)

它确实有效,但如果[@.disabled]="true"没有禁用animation(),我必须等到材质动画完成,这看起来很奇怪。

有什么解决办法吗?有没有办法仅在打开时禁用动画?

顺便说一句 - 如何将元素本身发送到“打开”函数?

链接到 stackblitz。

jpa*_*vel 5

有一个输出,您可以在其中执行您想做的两件事:afterExpanded

你可以这样做(基于你的 stackblitz 示例):

<mat-expansion-panel *ngFor="let g of array;let i = index" 
                     (afterExpand)="open(i,panel)"
                     #panel>
  ...
</mat-expansion-panel>
Run Code Online (Sandbox Code Playgroud)

你可以调用你的方法:

open(i: number, panel: MatExpansionPanel) {
  this.panels
    .toArray()[i]
    .nativeElement
    .scrollIntoView({ behavior: 'smooth' });

  // maybe you want to try doing:
  //
  // panel._body.nativeElement
  //    .scrollIntoView({ behavior: 'smooth' });
  //
  // But as _body is not part of the API, you must
  // do it at your own risk: it can change without any
  // previous warning
}
Run Code Online (Sandbox Code Playgroud)