Angularjs:在对象中分配数组

时间:2014-04-10 03:47:55

标签: arrays angularjs

当我尝试将数据分配给新数组时,我遇到了丢失数组中数据的问题 我使用的对象如下:

$scope.shops = [
  {
    name: "Kroger",
    items: [ { itemName: "Chips"} ]
  }
];

这是我正在使用的函数的代码,它可能是一个回调问题?或者其他的东西?我丢失了商店的商品信息。

$scope.addItem = function(newItem, newShop){

    var x = findShop(newShop);
    x.items.push(newItem);
    $scope.shops.push(x);
};

findShop = function(shopTag){
    var old = angular.copy($scope.shops);
    var tar = {
            name: shopTag,
            items: []
        };
    $scope.shops = [];
    angular.forEach(old, function(shop, key){
        if(shop.name === shopTag) {
            tar.items = angular.copy(shop.items);
        }
        else {
            $scope.shops.push(shop);
        }
    });
    return tar;
};

目标是让findShop函数返回一个具有正确名称的商店,如果以前没有商店则返回空白商品,或者如果商店已经创建商品,则返回商品。然后addItem将项目推送到shop.items数组并将商店推入$ scope 非常感谢任何帮助!!!

3 个答案:

答案 0 :(得分:1)

你是对的,正是这条线造成了问题,

tar.items = shop.items;

尝试使用它,

tar.items = angular.copy(shop.items);

答案 1 :(得分:1)

var old = $scope.shops; // old and $scope.shops point to the same place
..........
$scope.shops = []; // you assigned a new array that overrides the data
............
angular.forEach(old, function(shop, key){ // for each on an empty array????    

如果您不想指向相同的参考用途:

var copiedObject = angular.copy(objToCopy);

答案 2 :(得分:0)

我想即使在循环之前,数组也变空了。 Var old是对商店数组的引用,你在foreach之前将它变为空。有效地使旧的空...