为什么两个$ scope同时更新,重复数据

时间:2014-12-16 18:10:22

标签: javascript angularjs angularjs-scope javascript-objects

我有这段代码

  $scope.addToOrder = function(index) {
        var tempItem = $scope.item;

        if (tempItem[index].validate == true){
            if (_.isEmpty($scope.item2) == true) {
                $scope.item2.push(tempItem[index]);
            } else {
                for (var i = 0; i < $scope.item2.length; i++) {
                    if ($scope.item2[i] == tempItem[index]) {
                        break;
                    }

                    if (i == $scope.item2.length - 1) {
                        $scope.item2.push(tempItem[index]);
                    }
                }
            }
        }
    }

我想将数据从一个对象推送到另一个对象(item到item2),它运行良好,但是当我更改item中的数据时,item2更新我也不想要这个。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

原样,您正在使用对象引用。然后,如果修改一个,则另一个也被修改。

您可以使用angular.copy

$scope.addToOrder = function(index) {
    var tempItem = $scope.item;

    var itemCopy = angular.copy(tempItem[index]);

    if (tempItem[index].validate == true){
        if (_.isEmpty($scope.item2) == true) {
            $scope.item2.push(itemCopy);
        } else {
            for (var i = 0; i < $scope.item2.length; i++) {
                if ($scope.item2[i] == tempItem[index]) {
                    break;
                }

                if (i == $scope.item2.length - 1) {
                    $scope.item2.push(itemCopy);
                }
            }
        }
    }
}

答案 1 :(得分:1)

使用angular.copy按值处理

 angular.copy($scope.item1, $scope.item2);

 $scope.item1 = angular.copy($scope.item2);