我正在使用一次选择的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();
}
预先感谢
答案 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,但是您可以根据您的特定用例使用任何其他方式来标识它们。