【问题标题】:How to scroll to last row on a PrimeNG TurboTable component如何滚动到 PrimeNG TurboTable 组件的最后一行
【发布时间】:2021-09-12 15:06:15
【问题描述】:

我在 Angular 7 应用程序上使用 PrimeNG TurboTable 组件,并且有一个按钮可以向其中添加新行。问题是,当添加新行时,用户必须向下滚动到表格底部才能开始编辑它。我怎样才能滚动到它?

这是我在模板中定义表格的方式:

<p-table [value]="gridOptions" [scrollable]="true" scrollHeight="13em" 
selectionMode="single" [(selection)]="selectedOption" 
(onEditComplete)="onDataChanged($event)"
(onRowReorder)="onDataChanged($event)">
  [ ... ]

</p-table>

这是“添加选项”处理程序:

onAddOption() {
  // This adds a new option to the TurboTable
  this.gridOptions.push({ name: "", arg: "", comment: "", scope: this.scope });

  // I expected that selecting an option would scroll to it, but it doesn't work
  this.selectedOption = this.gridOptions[this.gridOptions.length-1];
}

有什么想法吗?谢谢!

【问题讨论】:

    标签: angular primeng primeng-turbotable


    【解决方案1】:

    更新:添加demo

    你只需要使用javascript

    $('.ui-table-scrollable-body').scrollTop($('.ui-table-scrollable-body')[0].scrollHeight);
    

    或动画:

    $(".ui-table-scrollable-body").animate({ scrollTop: $('.ui-table-scrollable-body').prop("scrollHeight")}, 200
    

    没有jquery:

    TS:

    scroll(table: Table) {
        let body = table.containerViewChild.nativeElement.getElementsByClassName("ui-table-scrollable-body")[0];
        body.scrollTop = body.scrollHeight;
      }
    

    HTML:

    <p-table #table [columns]="cols" [value]="sales" [scrollable]="true" scrollHeight="200px"> ... </p-table>
    <button (click)="scroll(table)">Scroll</button>
    

    【讨论】:

    • 嗨!我试图避免使用 jQuery 或直接访问 DOM,但感谢您的建议!
    • 此解决方案直接访问 DOM,但它是可以接受的,因为我看到该组件没有任何方法来执行此操作。谢谢!
    • 我在使用 Angular 时遇到的唯一问题是在 UI 更新为新行之前调用了 scrollTop。一旦我将 scrollTop 包裹在 setTimeout(() =&gt; {...}, 0) 中,它就修复了竞争条件。
    【解决方案2】:

    我来这个帖子很晚,但我来到这里是因为我想知道如何向下滚动到 PrimeNg 表中的最后一条记录。我应该仔细阅读整个文档。好吧,我在documentation 本身中找到了解决方案。

    我正在使用 Angular 11 和 PrimeNg 11。我使用以下内容滚动到表格的底部/最后一行。要求是在向表中添加新记录时向下滚动到最后一条记录(通过反应式表单将记录提交到后端,然后作为记录创建的结果获取最新添加的记录。)

    我发现 API 调用 scrollTo() 运行良好。这是一个带有可滚动区域的预加载(非延迟加载)表格

    模板片段

    <div class="page-content" style="height: calc(100vh - 100px);">
    <p-table [value]="someDataArray" [rows]="lazyCaseComments.length"
               #vsTable [virtualScroll]="true"
               [scrollable]="true" 
               [totalRecords]="totalRecords" 
               scrollHeight="flex">
      ...
      ...
      </p-table>
      </div>
    

    组件 .ts 文件的片段

    1. 使用@ViewChild()获取表的句柄

      @ViewChild('vsTable') vsTable:Table;

    2. 在事件处理程序或向表中添加记录的方法中,如果您想滚动到该表的底部以查看最新添加的记录,请使用以下代码

      this.vsTable.scrollTo({bottom: 0, behavior:'smooth'});

    在您的事件处理程序中,如按钮

    【讨论】:

    • 嗨!问题是我们使用的是 PrimeNG 8,而 scrollTo 方法在其表格组件中尚不可用。在其他使用版本 9 的 PrimeNG 的项目中,我意识到了 scrollToscrollToVirtualIndex 方法,并且从那时起我就在使用它们。
    猜你喜欢
    • 2019-09-06
    • 2018-10-28
    • 2018-09-15
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多