Javascript Angularjs+;停止将数据更新为变量

Javascript Angularjs+;停止将数据更新为变量,javascript,angularjs,json,Javascript,Angularjs,Json,我和angularjs一起工作。我有一些不同的问题 我有HTTP呼叫。HTTP请求之后,响应将存储在两个不同的变量中。在我更改变量中的数据后,意味着它也将自动更改为其他变量 $http.get('get/list') .success(function(data, status) { $scope.test1 = data; $scope.test2 = data; }) .error(function(

我和angularjs一起工作。我有一些不同的问题

我有HTTP呼叫。HTTP请求之后,响应将存储在两个不同的变量中。在我更改变量中的数据后,意味着它也将自动更改为其他变量

$http.get('get/list')
        .success(function(data, status) {
           $scope.test1 = data;
           $scope.test2 = data;
        })
        .error(function(data) {

        });
//示例json

    {
    "lists": [
        {
            "_id": "575e6d4bde006e3176bb9dc5",
            "items": [
                {
                    "name": "a"
                }, {
                    "name": "b"
                }
            ],
            "name": "fridge",
            "status": "done"
        }
    ]
}
之后,我将json推入test1变量

$scope.addRow = function(comment1) {
            $scope.test1.lists.push({
                'name' : 'c'
            });

        };
但是当我打印$scope.test2时,它也会自动添加新的添加项。(name=c)


有没有解决这个问题的办法。我需要打印test2在HTTP请求中得到的内容。

这是因为
$scope.test1
$scope.test2
都引用了内存中的相同对象。使用
angular.copy
创建对象的深度副本。因此,
$scope.test1
&
$scope.test2
将不再是彼此的别名

$http.get('get/list')
    .success(function(data, status) {
       $scope.test1 = angular.copy(data);
       $scope.test2 = angular.copy(data);
    })
    .error(function(data) {

    });

这是因为
$scope.test1
$scope.test2
都引用了内存中的相同对象。使用
angular.copy
创建对象的深度副本。因此,
$scope.test1
&
$scope.test2
将不再是彼此的别名

$http.get('get/list')
    .success(function(data, status) {
       $scope.test1 = angular.copy(data);
       $scope.test2 = angular.copy(data);
    })
    .error(function(data) {

    });

它与浅拷贝/深拷贝的关系相同

$scope.data1
$scope.data2
中存储值时,必须进行深度复制

用这样的东西

$scope.test1 = angular.copy(data);
$scope.test2 = angular.copy(data);

它将创建一个深度副本,并在
$scope中更改。data1
不会影响
$scope。data2

它与浅层副本/深度副本的关系相同

$scope.data1
$scope.data2
中存储值时,必须进行深度复制

用这样的东西

$scope.test1 = angular.copy(data);
$scope.test2 = angular.copy(data);

它将创建一个深度副本,并在
$scope中更改。data1
不会影响
$scope。data2

在HTML端,您还可以通过将两个“:”作为变量的前缀来剪切视图和控制器之间的数据绑定。像这样:

<div>{{::test2}}</div>
{{::test2}

您的变量不会再次更新,但更改不会显示在网页中。

在HTML端,您还可以通过将两个“:”作为变量前缀来剪切视图和控制器之间的数据绑定。像这样:

<div>{{::test2}}</div>
{{::test2}
您的变量不会再次更新,但更改不会显示在网页中