2017-11-11 60 views
0

我有一個管理徽章的AngularJS應用程序。在應用程序中是一個表單,用於設置徽章#以及它被分配給的人的名字等。這些被存儲在$ scope.badge中。Angular.copy不斷給我相同的對象

當用戶提交表單,我想新的徽章添加徽章的清單,其中顯示以下表格。

部分代碼如下所示:

var badge = angular.copy($scope.badge); // make a copy so we don't keep adding the same object 
$scope.badgeList.push(badge); 

我第一次運行此代碼,它增加了徽章預期。 任何後續運行此代碼的時間,下一個徽章將替換badgeList中的上一個徽章。換句話說,如果我添加5個徽章,badgeList仍然只有1個對象,因爲它只是不斷被替換。

我在想,這可能是因爲同一個對象不斷添加?也許我錯了?我正在使用angular.copy來嘗試並避免發生這種情況,但它似乎並不奏效。

對此有何看法?

+1

其他事情正在發生,所以你需要向我們展示更多的代碼。 https://jsfiddle.net/9vwvscug/ – dave

+0

這是如何相關angular.copy和'badge'?它的'badgeList'不符合你的期望。請提供http://stackoverflow.com/help/mcve – estus

回答

0
$scope.badgeList.push(($scope.badge); 
console.log($scope.badgeList) 

沒有必要當你想使對象的克隆使用angular.copy因爲你最終存儲在數組

angular.copy用於所有的徽章,而不是更新現有的對象,克隆的變化不會反映在主要對象中。

如果你只是想保持徽章列表如果您刷新控制器則顯然變量將被重置,這樣可以執行的代碼塊

這樣

function addBadges(){ 
    $scope.badgeList.push(($scope.badge); 
    console.log($scope.badgeList) 

    } 

您需要使用角度服務的情況。 創建服務和服務中,你需要定義getter和setter方法將數據持久 和你BAGES陣列幫助,如果保存在服務將持續存在,直到應用程序在前臺。

0

你可以做這樣的事情。

function addBadges(){ 
    //initialize if undefined or null 
    if(!$scope.badgeList){ 
     $scope.badgeList = []; 
    } 

    //Check if badge does not exists in the list 
    if ($scope.badgeList.indexOf($scope.badge) === -1) { 
      //Add to badge list 
      $scope.badgeList.push($scope.badge); 
    } 
} 
相關問題