0

我会简短。

这是 stackblitz 上的问题:trackByBugntfree \

说明:
资源包含显示在屏幕上的权限,带有复选框。\

Objective:
当一个“权限”被选中时,只有它引用的对象应该被使用 ngModel 修改。\

问题:
当检查资源“A”的权限“一”时,资源“B”和“C”的权限“一”也被选中。

编辑:也许切片是问题,我会尝试解决这个问题

4

2 回答 2

1

由于切片返回浅拷贝,当我们更改输入中的值时,它正在修改所有值。尝试使用JSON.parse(JSON.stringify(this.permissions))进行深拷贝

 resources = [
    { resourceId: 1, name: 'One', permissions: JSON.parse(JSON.stringify(this.permissions)) },
    { resourceId: 2, name: 'Two', permissions: JSON.parse(JSON.stringify(this.permissions))},
    { resourceId: 3, name: 'Three', permissions: JSON.parse(JSON.stringify(this.permissions))}
  ];

分叉示例

于 2021-07-14T11:32:03.187 回答
-1

您需要在trackby中返回permission.id(trackby需要一个唯一的标识符),否则它将不起作用

UPD:但您的问题与 trackby 无关。对于您尝试引用相同权限数组的所有资源,因此 Angular 将它们视为相同。有不同的可能解决方案,但最明显的一个是在每个资源中都有一个权限属性,以便所有权限都有不同的引用。

于 2021-07-14T11:19:34.087 回答