我会简短。
这是 stackblitz 上的问题:trackByBugntfree \
说明:
资源包含显示在屏幕上的权限,带有复选框。\
Objective:
当一个“权限”被选中时,只有它引用的对象应该被使用 ngModel 修改。\
问题:
当检查资源“A”的权限“一”时,资源“B”和“C”的权限“一”也被选中。
编辑:也许切片是问题,我会尝试解决这个问题
我会简短。
这是 stackblitz 上的问题:trackByBugntfree \
说明:
资源包含显示在屏幕上的权限,带有复选框。\
Objective:
当一个“权限”被选中时,只有它引用的对象应该被使用 ngModel 修改。\
问题:
当检查资源“A”的权限“一”时,资源“B”和“C”的权限“一”也被选中。
编辑:也许切片是问题,我会尝试解决这个问题
由于切片返回浅拷贝,当我们更改输入中的值时,它正在修改所有值。尝试使用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))}
];
您需要在trackby中返回permission.id(trackby需要一个唯一的标识符),否则它将不起作用
UPD:但您的问题与 trackby 无关。对于您尝试引用相同权限数组的所有资源,因此 Angular 将它们视为相同。有不同的可能解决方案,但最明显的一个是在每个资源中都有一个权限属性,以便所有权限都有不同的引用。