2017-05-29 69 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

檢查更新的答案 –