AngularJS将对象添加到数组更新所有类似的对象

时间:2016-10-10 10:23:35

标签: javascript angularjs

我从WebAPI获取数据并将其存储在范围可变的数组产品中。

$scope.products

我还有第二个范围数组

$scope.selectedFish = [];

我要做的是在products数组中找到一个产品,修改它并将其添加到selectedProducts数组中。

我在同一个控制器上声明了以下函数。

// Function to add a new fish to the selectedFish array
            $scope.add = function() {
                // Find existing fish from products list
                var newFishToAdd = $filter('filter') ($scope.products, { Id: $scope.selectedProduct });
                // Change the name property
                newFishToAdd[0].FishName = $scope.selectProductName;
                // Add new fish to the selected fish array
                $scope.selectedFish.push(newFishToAdd[0]);
                $scope.bindModel();
            }

这确实有效,但是如果我使用不同的FishName值添加两次相同的产品,我会遇到困难,它会更新数组中所有输入最后一个FishName的selectedProduct的条目。

2 个答案:

答案 0 :(得分:1)

它作为对象引用发生的是相同的。使用angular.copy()。

$scope.add = function() {
    // Find existing fish from products list
    var newFishToAdd = $filter('filter')($scope.products, { Id: $scope.selectedProduct });

    var obj = angular.copy(newFishToAdd[0]);
    obj.FishName = $scope.selectProductName;

    // Add new fish to the selected fish array
    $scope.selectedFish.push(obj);
    $scope.bindModel();
}

答案 1 :(得分:0)

为此,您应该尝试使用angular.copy。正如角度文档中所述(https://docs.angularjs.org/api/ng/function/angular.copy

angular.copy

创建源的深层副本,该副本应该是对象或数组。

如果未提供目的地,则会创建对象或阵列的副本。

如果提供了目标,则会删除其所有元素(对于数组)或属性(对象),然后将源中的所有元素/属性复制到该目标。

如果source不是objectarray(包括nullundefned),则会返回source。 如果sourcedestination相同,则会引发exception

相关问题