Angular JS(v1) - $ scope太聪明了?

时间:2017-01-11 06:06:16

标签: angularjs variables scope

我有控制器:

$http.post("./post", { get: id })
    .then(function(res) {
        $scope.acct = res.data;
        $scope.orig = calcThis(res.data);
    }); 

说明:在$ http.post之后,我期待以下内容:

$scope.acct.post_data

$scope.orig.post_data
$scope.orig._1
$scope.orig._2
$scope.orig._3

....其中子元素_1,_2,_3被赋值为calcThis()函数的结果。

然而,我改为:

$scope.acct.post_data
$scope.acct._1
$scope.acct._2
$scope.acct._3

$scope.orig.post_data
$scope.orig._1
$scope.orig._2
$scope.orig._3

此处的Plunker:https://plnkr.co/edit/InQkQXDkmhBftkD59CuB?p=preview

解释&问题:虽然$ scope.acct和$ scope.orig使用相同的post-ed数据,但它们在DOM上有不同的用途。

  • 为什么$ scope.acct在它们是不同的变量/对象时会继承$ scope.orig(正确的术语是什么)?
  • 如何在Angular中创建两个独立的变量/对象?

谢谢。我很感激你的答案!

1 个答案:

答案 0 :(得分:0)

在Javascript中,对象通过引用传递。所以origacct将引用相同的对象。您需要使用angular.copy制作该对象的副本。

$scope.orig = calcThis(angular.copy(res.data));