这是我的数据结构。你可以看到每个房子都包含一个可变长度的房间阵列,它们也是对象:
数据结构:
houses = [{
id: 1,
age: 50,
cost: 100000,
rooms: [{
id: 1,
type: basement,
sqft: 600,
},{
id: 2,
type: bedroom
sqft: 450
}]
}]
我使用ng-repeat
在网格中显示此信息,每行都有一个编辑按钮。当用户编辑房屋时,他们会看到一个屏幕,他们可以编辑数据的临时副本,还有一个保存按钮。如果他们不保存,我将恢复原始数据。一旦进入House的编辑模式,他们就可以在单独的子屏幕中编辑和保存单个房间。我不确定如何正确保存这些数据。
房屋和房间有自己的保存按钮。如果他们保存房间数据,我必须将临时嵌套数据复制到原始房间对象,但我不知道如何访问该对象,因为他们一直在编辑临时对象。也许他们已经改变了一些房产,但只在其中一个房间点击保存,所以我不能只复制整个临时房屋对象。
如果按保存后,如何访问原来的Room#2?有没有办法可以使用$index
来更改原始数据对象?我需要保存房间而不保存基础房屋对象。即只应保存嵌套对象。
我不知道是否可以使用$index
,因为我的数据也可能在编辑行之前进行排序和过滤。
答案 0 :(得分:0)
最简单和可扩展的解决方案是将“id”添加为每个房间,门,浴室或窗户的属性。或者在迭代此对象时将'index'作为属性。
因此,您将获得用户无法更改的对象的id或index,并且您可以识别要覆盖的正确对象。
答案 1 :(得分:0)
点击编辑创建对象的副本
ng-click=edit(id)
$scope.edit(id){
var result = OriginalArray.filter(function( obj ) {
return obj.id == id;
});
$scope.copy=angular.copy(result [0])
}
然后使用此对象编辑数据,编辑完成后,用户将按保存按钮将对象复制回房间数组;
result[0]=$scope.copy;
并且你不能在这里使用$ index,因为应该在原始数组中进行更改。