2015-09-09 27 views
0

我想將對象複製到循環中的另一個對象。但是在迭代過程中,複製的對象被循環中的最後一個對象覆蓋。我的代碼看起來像Angular JS覆蓋循環中複製的對象

$scope.createDashboradsforeachTab = function(dashboardData, eachTab) { 
     var dashboardslayoutArray = eachTab.dashlettes; 
     dashboardData.dashletteBeansList = eachTab.dashlettes; 
     angular.forEach(dashboardslayoutArray,function(dashboardslayout) { 
     dashboardData.dashletteBeansList = []; 
     dashboardData.dashletteBeansList[0] = dashboardslayout; 
     var dashletteIdInTab = dashboardslayout.dashletteId; 
     if (dashboardslayout.dashletteId == 12) { 
     $scope.dashboardDataForDrillDown = {}; 
     $scope.dashboardDataForDrillDown = angular.copy(dashboardData); 
     } 
     //Rest of my code here 
     }); 

    } 

您可以清楚地看到現在eachTab包含一組dashlettes。現在我通過每個dashlette迭代,而迭代我將dashlette對象分配給dashboardData對象。雖然迭代iam將dashboardData對象複製到另一個面向dashlette id 12的對象。如同現在現在它被正確複製我已經在調試中進行了檢查。在下一次迭代中,dashlet的id是13,我將它分配給dashboardData對象。現在我的複製對象也受到新的dashlette(13)對象的影響。請幫我解決這個問題,如何停止覆蓋複製的對象。

+0

可能會在DashboardsDataService.getTabDetails(dashboardData)調用上面應用一個檢查,以便僅針對特定條件調用它。 –

+0

Actucally該方法調用每個選項卡中的每個儀表板。如果我的選項卡包含4個儀表板,則必須調用4次才能從後端獲取每個儀表板數據。但是每個儀表板的dashboardData對象都不相同。在調用服務之前,僅在每個選項卡中根據儀表板類型更改了儀表板數據對象。 –

回答

1

一般而言,根據您的業務邏輯,您的過濾條件可能是錯誤的。不過,大膽猜想這裏是用嚴格的平等檢查===爲比較也正如你所說,你的

$ scope.dashboardDataForDrillDown

包含最近的8項數據。這意味着這種情況在任何時候都是正確的。您可以在調音臺中調試您的狀況以作進一步驗證。

+0

我已經更新了我的代碼,您可以清楚地看到現在eachTab包含一組dashlettes。現在我通過每個dashlette迭代,而迭代我將dashlette對象分配給dashboardData對象。雖然迭代iam將dashboardData對象複製到另一個面向dashlette id 12的對象。如同現在現在它被正確複製我已經在調試中進行了檢查。在下一次迭代中,dashlet的id是13,我將它分配給dashboardData對象。現在我的複製對象也受到新的dashlette(13)對象的影響。 –

+0

你有嚴格的平等檢查===嗎?此外,如果您可以提供給我們確切的對象結構,則可以快速解決您的問題,例如dashboardData = [ dashlettes:{} ]; eachTab = [ dashlettes:{} ];或任何快速撥入者。我覺得基於當前代碼的一部分循環你的重寫對象本身。雖然我需要檢查你的對象的結構 – road2victory

+0

感謝它得到嚴格檢查的工作。 –