这是我的数据结构。 您可以看到每个房屋都包含一个可变长度的房间数组,这些房间也是对象:
数据结构:
houses = [{
id: 1,
age: 50,
cost: 100000,
rooms: [{
id: 1,
type: basement,
sqft: 600,
},{
id: 2,
type: bedroom
sqft: 450
}]
}]
我使用ng-repeat
在网格中显示此信息,每行都有一个编辑按钮。 当用户编辑房屋时,他们会看到一个屏幕,他们可以编辑数据的临时副本,并且有一个保存按钮。 如果他们不保存,我会恢复到原始数据。 一旦在房屋上进入编辑模式,他们就可以在单独的子屏幕中编辑和保存各个房间。 我不确定如何正确保存这些数据。
房屋和房间都有自己的保存按钮。 如果他们保存房间数据,我必须将临时嵌套数据复制到原始房间对象上,但我不知道如何访问该对象,因为他们一直在编辑临时对象。 也许他们已经更改了一些房屋属性,但只在其中一个房间上点击了"保存",所以我不能只复制整个临时房屋对象。
例如,当他们按下保存后,如何访问原始房间 #2? 有没有办法使用$index
对原始数据对象进行更改? 我需要保存房间而不保存基本房屋对象。 即只应保存嵌套对象。
我不知道我是否可以使用该$index
因为我的数据也可以在编辑行之前进行排序和过滤。
最简单且可扩展的解决方案是,将"id"添加为每个房间,门,浴室或窗户的属性。或者只是在迭代此对象时将"index"作为属性。
因此,您将获得用户无法更改的对象的id或索引,并且可以识别要覆盖的正确对象。
单击编辑时创建对象的副本
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因为更改应在原始数组中完成。