数据网格选择随机丢失
Datagrid selection get lost ramdomly
我正在使用单选的 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();
}
提前致谢
您在 *clrDgItems
上缺少 trackBy
。每当您处理从服务器接收到的对象时,您确实希望确保您正在使用 trackBy
来帮助 Angular(以及 Clarity)知道如何比较您的对象。否则,唯一的比较 Angular 可以执行的是引用相等性,当您不断从服务器获取更新的对象时,它不会被保留。这里是 the official documentation for it, and you can find a maybe more readable explanation in the template syntax docs.
*clrDgItems
支持与 *ngFor
相同的 trackBy
选项,因此您可以只写:
<clr-dg-row *clrDgItems="let unit of units; trackBy: trackById" ...>
其中 trackById
是您添加到组件中的函数,如下所示:
trackById = (index, unit) => unit.id
我在这里假设您从服务器接收到的对象有一个 ID,但您可以根据您的具体用例使用任何其他方式来识别它们。
我正在使用单选的 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();
}
提前致谢
您在 *clrDgItems
上缺少 trackBy
。每当您处理从服务器接收到的对象时,您确实希望确保您正在使用 trackBy
来帮助 Angular(以及 Clarity)知道如何比较您的对象。否则,唯一的比较 Angular 可以执行的是引用相等性,当您不断从服务器获取更新的对象时,它不会被保留。这里是 the official documentation for it, and you can find a maybe more readable explanation in the template syntax docs.
*clrDgItems
支持与 *ngFor
相同的 trackBy
选项,因此您可以只写:
<clr-dg-row *clrDgItems="let unit of units; trackBy: trackById" ...>
其中 trackById
是您添加到组件中的函数,如下所示:
trackById = (index, unit) => unit.id
我在这里假设您从服务器接收到的对象有一个 ID,但您可以根据您的具体用例使用任何其他方式来识别它们。