编辑嵌套的复制对象

时间:2017-05-29 11:08:45

标签: javascript angularjs

这是我的数据结构。你可以看到每个房子都包含一个可变长度的房间阵列,它们也是对象:

数据结构:

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,因为我的数据也可能在编辑行之前进行排序和过滤。

2 个答案:

答案 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,因为应该在原始数组中进行更改。