我正在使用单选的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();
}提前感谢
发布于 2018-08-02 06:39:07
您缺少*clrDgItems上的trackBy。当您处理从服务器接收的对象时,您确实希望确保使用trackBy来帮助Angular (从而清楚地)了解如何比较您的对象。否则,Angular可以执行的唯一比较是引用相等,当您不断从服务器获取更新的对象时,引用相等不会被保留。下面是the official documentation for it,您可以在template syntax docs中找到更具可读性的解释。
*clrDgItems支持与*ngFor相同的trackBy选项,因此您只需编写:
<clr-dg-row *clrDgItems="let unit of units; trackBy: trackById" ...>其中,trackById是添加到组件中的函数,如下所示:
trackById = (index, unit) => unit.id我在这里假设您从服务器接收的对象有一个id,但是您可以使用任何其他方法来标识它们,具体取决于您的特定用例。
https://stackoverflow.com/questions/51639980
复制相似问题