angular.copy有什么好处?

时间:2015-07-15 08:01:36

标签: javascript angularjs

我在某些情况下使用angular.copy,比如将模型默认值复制到表单模型,如下所示:

var customerModel = {
  name: '',
  point: 0
};

$scope.customer = angular.copy(customerModel);

function save() {
  //... Reset $scope.customer after success submit
  $scope.customer = angular.copy(customerModel);
}

...防止默认的customerModel发生变化。

但为什么要复制空对象或数组呢? {}或[]

我在一些代码中发现在空对象或数组上使用了angular.copy。为什么他们不将空对象直接分配给变量?

$scope.customer = {}; // or [] for array

如果你在空对象或数组上使用副本,你能解释一下这个好处吗?

ajax响应($ http)怎么样?

还有一个问题,你对ajax的反应做了什么?将其直接复制或分配给变量?

$http
  .get('example.com/api/v1/get/customer/1')
  .success(function(response) {
    $scope.customer = angular.copy(response.data);
    // or do you use $scope.customer = response.data ?
  })
;

如果您使用了副本,您认为响应对象会发生什么? 它留在记忆中吗?或自动删除?

2 个答案:

答案 0 :(得分:4)

复制对象以防止其他代码修改它。 (原始对象可能会更改,但您的副本不会看到更改)

如果你这样做:

 $scope.customer = customerModel

...以及一些回调/服务/未改变customerModel,您的范围将反映此更改。这并不总是令人满意的,因此需要深度复制。

复制空文字对象

$scope.customer = angular.copy({})
// or
$scope.customer = {}

这没有任何区别。每次都是一个新的空物体。请注意,它与此非常不同:

this.customerModel = {};
$scope.customer = angular.copy(this.customerModel)

复制ajax响应数据

同样的规则适用。如果你想确保这个对象不会从你下面改变(例如,如果你也把它传递到其他地方就可能发生),你应该复制它。

答案 1 :(得分:3)

angular.copy创建变量的深层副本,以便它保存另一个变量的引用

有时它发生在用户不想通过引用使用调用然后深层复制进入操作时根据您的问题

var customerModel = {
  name: '',
  point: 0
};

如果您使用$scope.customer = angular.copy(customerModel);,它将创建customerModel的深层副本

就$ http服务而言.Data来自响应,如果你直接分配它,那么由于数据来自另一个来源,所以不会引用调用。 所以我宁愿在$ http.get()

的情况下直接分配它