2017-05-29 62 views
0

这里是我的数据结构。你可以看到,每一个房子包含客房,也是对象的一个​​可变长度数组:编辑嵌套的复制对象

数据结构:

houses = [{  
    id: 1, 
    age: 50, 
    cost: 100000, 
    rooms: [{ 
     id: 1, 
     type: basement, 
     sqft: 600, 
    },{ 
     id: 2, 
     type: bedroom 
     sqft: 450 
    }] 
}] 

我显示使用ng-repeat在网格信息,每一行都有一个编辑按钮。当用户编辑House时,他们会看到一个屏幕,他们可以编辑数据的临时副本,并且有一个保存按钮。如果他们不保存,我会恢复到原始数据。一旦进入编辑模式,他们可以在单独的子屏幕中编辑和保存单独的房间。我不知道如何正确保存这些数据。

房屋和房间都有自己的保存按钮。如果他们保存房间数据,我必须将临时嵌套数据复制到原始房间对象上,但我不知道如何访问该对象,因为他们编辑的是临时对象。也许他们已经改变了一些房子的属性,但只在其中一个房间里点击保存,所以我不能复制整个临时房屋对象。

一旦他们按下保存,我如何访问例如原始房间#2?有没有一种方法可以使用$index对我的原始数据对象进行更改?我需要保存房间而不保存基础房屋对象。即只应该保存嵌套对象。

我不知道我是否可以使用$index,因为在编辑行之前,我的数据也可能会被排序和过滤。

+0

如果您从服务器获取数据,请将数据保存到服务器。否则,您将暂时保存并刷新,您将丢失保存的数据。 –

回答

0

最简单和可扩展的解决方案将为每个房间,门,浴室或窗户添加'id'作为属性。或者在你迭代这个对象的时候把'index'作为一个属性。

因此,您将获得用户无法更改的对象的id或索引,并且您可以识别要覆盖的正确对象。

上编辑的点击
+0

然后,我需要遍历所有房屋或房间以找到正确的房间或房间,对吗?由于它是一个数组,我无法通过键查找它。 – dbquestions

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,因为更改应该在原始数组中完成。

+0

好的,我想我明白了。我只是想知道如果数据被过滤,我会怎么做,因为选定的索引将不同于原始数据中的索引 – dbquestions

+0

检查更新的答案 –