改变:
$scope.newContact = $scope.emptyContact;
至:
angular.copy($scope.emptyContact, $scope.newContact);
见:http ://docs.angularjs.org/api/angular.copy
解释如下:
在 Javascript 中,当您将一个对象分配给另一个对象时,您实际上是在传递一个引用,因此两个变量实际上都在引用同一个对象。
这是来自 NodeJS repl 的示例:
> a = {'msg': 'hello'}
{ msg: 'hello' }
> b = a
{ msg: 'hello' }
> b.count = 50
50
> a
{ msg: 'hello', count: 50 }
>
在上面的示例中,引用 froma
被复制到b
, 到两者a
,b
然后指向相同的value。
如果您希望能够在b
不影响的情况下进行更改a
,则需要克隆而a
不是仅复制引用。这是一种方法:
b = JSON.parse(JSON.stringify(a))
以 Node repl 中的示例为例:
> a = {'msg': 'bye'}
{ msg: 'bye' }
> b = JSON.parse(JSON.stringify(a))
{ msg: 'bye' }
> b
{ msg: 'bye' }
> b.count = 55
55
> a
{ msg: 'bye' }
> b
{ msg: 'bye', count: 55 }
>
AngularJS实际上有自己的实现,请参阅http://docs.angularjs.org/api/angular.copy,这是您在使用 AngularJS 时应该实际使用的。