Datagrid选择随机丢失

时间:2018-08-01 18:25:17

标签: angularjs vmware-clarity

我正在使用一次选择的VMWare Clarity数据网格。

在后台,我正在接收更新的数据,并且随机地,不再选择选定的行。

我发现这些链接似乎存在相同的问题,并且看起来在0.12.2中已得到修复,但我从侧面看不到:

https://github.com/vmware/clarity/issues/484

https://github.com/vmware/clarity/issues/2342

这是我的代码

html

<clr-datagrid [clDgRowSelection]="true" [(clrDgSingleSelected)]="selectedUnit">
   ...

   <clr-dg-row *clrDgItems="let unit of units" [clrDgItem]="unit" (click)="backupSelectedUnit(unit)">
      ...
   </clr-dg-row>
</clr-datagrid>

JS

myfunc() {

    this.units = this.getUpdatedUnits();
}

预先感谢

1 个答案:

答案 0 :(得分:0)

您缺少trackBy上的*clrDgItems。每当处理从服务器收到的对象时,您确实要确保使用trackBy来帮助Angular(以及因此Clarity)知道如何比较对象。否则,Angular只能执行的比较是引用相等,当您不断从服务器获取更新的对象时,引用相等不会保留。这是the official documentation for it,您可以在template syntax docs中找到更容易理解的解释。

*clrDgItems支持与trackBy相同的*ngFor选项,因此您可以编写:

<clr-dg-row *clrDgItems="let unit of units; trackBy: trackById" ...>

其中trackById是添加到组件的函数,如下所示:

trackById = (index, unit) => unit.id

我在这里假设您从服务器收到的对象具有ID,但是您可以根据您的特定用例使用任何其他方式来标识它们。