首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据网格选择随机丢失

数据网格选择随机丢失
EN

Stack Overflow用户
提问于 2018-08-02 02:25:17
回答 1查看 359关注 0票数 0

我正在使用单选的VMWare Clarity数据网格。

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

我发现这些链接似乎有相同的问题,看起来它是在0.12.2中修复的,但我没有从侧面看到这一点:

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

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

下面是我的代码

html

代码语言:javascript
复制
<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

代码语言:javascript
复制
myfunc() {

    this.units = this.getUpdatedUnits();
}

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 06:39:07

您缺少*clrDgItems上的trackBy。当您处理从服务器接收的对象时,您确实希望确保使用trackBy来帮助Angular (从而清楚地)了解如何比较您的对象。否则,Angular可以执行的唯一比较是引用相等,当您不断从服务器获取更新的对象时,引用相等不会被保留。下面是the official documentation for it,您可以在template syntax docs中找到更具可读性的解释。

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

代码语言:javascript
复制
<clr-dg-row *clrDgItems="let unit of units; trackBy: trackById" ...>

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

代码语言:javascript
复制
trackById = (index, unit) => unit.id

我在这里假设您从服务器接收的对象有一个id,但是您可以使用任何其他方法来标识它们,具体取决于您的特定用例。

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

https://stackoverflow.com/questions/51639980

复制
相关文章

相似问题

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