首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟涡旋在角材料2表中的应用@角/cdk-实验

虚拟涡旋在角材料2表中的应用@角/cdk-实验
EN

Stack Overflow用户
提问于 2018-06-05 02:46:00
回答 3查看 23.6K关注 0票数 26

我有一个表显示了这么多行,我想优化它的性能。我通过使用虚拟卷轴技术找到了一个解决方案。下面是角材料CDK V形涡旋视口组件的一个示例,我发现了一个简单的div

代码语言:javascript
复制
<cdk-virtual-scroll-viewport class="list-container lg" [itemSize]="52.5">
  <div *cdkVirtualFor="let state of statesObservable | async;" class="list-group-item">
     <div class="state">{{state.name}}</div>
     <div class="capital">{{state.capital}}</div>
  </div>
</cdk-virtual-scroll-viewport>

但是,我想像下面这样将它与转角材料工作台集成

代码语言:javascript
复制
<table mat-table [dataSource]="dataSource">
    <ng-container  *ngFor="let c of displayedColumns" [matColumnDef]="c">
      <th mat-header-cell *matHeaderCellDef>{{getTitle(c)}}</th>
      <td mat-cell style="white-space: pre-wrap;" *matCellDef="let element"> {{element[c]}}</td>
    </ng-container>
    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
 </table>

我想知道如何将cdk-virtual-scroll-viewport封装到mat-table。我的表显示多达1000行和超过20列,而且在加载和滚动时性能非常慢。

PS:我知道可以用https://material.angular.io/components/paginator/overview来解决这个问题,但我不想这么做。

版本

  1. "@angular/material": "^6.2.0"
  2. @angular/cdk": "^6.2.0"
  3. @angular/cdk-experimental": "^6.2.1"
  4. "@angular/core": "6.0.3"
  5. "@angular/cli": "6.0.7"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-10 09:40:29

还没有得到支持。但是有些人尝试做一些POC。这里有一个https://github.com/angular/material2/issues/10122#issuecomment-440442656

在这个问题中还讨论了虚拟滚动以及上面的POC是如何工作的。

票数 2
EN

Stack Overflow用户

发布于 2018-09-20 17:32:19

这并不是目前存在的问题。CdkTable (或MatTable)组件还不支持虚拟滚动,而是

@angular/cdk中的虚拟滚动支持仍然处于试验阶段--这将在版本7中发生变化。

然而,当这个特性落地时,下一步将是为表实现它。我会解释原因。

cdk-virtual-scroll-viewport*cdkVirtualFor指令的容器,如果我们查看这个指令(CdkVirtualForOf),我们可以看到

  1. It 实现 CollectionViewer (代码)
  2. 它接受(使用) DataSource实例(代码)

考虑到这一点,让我们看看CdkTable

  1. It 实现 CollectionViewer (代码)
  2. 它接受(使用) DataSource实例(代码)

这种相似性不是偶然的,cdk-virtual-scroll-viewport可以像使用cdkVirtualFor那样使用表(经过一些调整)。

我不确定最终的实现是什么,开发人员是否能够从外部包装表,还是表将在内部设置,但这是它的方向。

如果我不得不猜测,我会说,开发人员将选择是否要用虚拟卷轴包装表。这是因为cdk-virtual-scroll-viewport不查询cdkVirtualFor (通过ViewChild),它是被动的,等待附加的东西。这是一个迹象,表明这是前手的想法。

您现在就可以这样做,通过扩展CdkTable并自己进行调整,这将需要了解表的内部结构,并且可能需要一些时间。我建议你等一会儿。

票数 8
EN

Stack Overflow用户

发布于 2019-11-18 10:10:32

我做了一个定制指令,什么能解决这个问题:

1)安装一个包:$ npm install -save ng-table-virtual-scroll并将其添加到导入中:

代码语言:javascript
复制
import { TableVirtualScrollModule } from 'ng-table-virtual-scroll';

@NgModule({
  imports: [
    // ...
    TableVirtualScrollModule
  ]
})
export class AppModule { }

2)使用来自包的自定义DataSource

代码语言:javascript
复制
import { TableVirtualScrollDataSource } from 'ng-table-virtual-scroll';

@Component({...})
export class MyComponent {

  dataSource = new TableVirtualScrollDataSource();

}

3)在viewport容器上使用指令:

代码语言:javascript
复制
<cdk-virtual-scroll-viewport tvsItemSize style="height: 400px;">
    <table mat-table [dataSource]="dataSource">
    ...
    </table>
</cdk-virtual-scroll-viewport>

该指令允许您使用mat-table的所有功能,如排序、分页、粘性头/列等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50691281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档