首先让我们看看示例代码。





数据:
User.data:{资料} } {用户。
user1.data:{ {资料} } user1。
改变
复制
消息:{ {资料} } copyuser。





Angular.module('app,{ })
控制器('copycontroller功能(范围){
/ /身体…
($ scope.changedata1 =功能){
/主体…
范围。用户user1 = =范围。
Scope.user;
scope.user1.data美元=改变;
}
($ scope.copy =功能){
/主体…
范围。copyuser = angular.copy(范围。copyuser = angular.copy(
范围(用户);
}
});





正如你可以看到从上面的演示,当复制按钮被点击的COPYDATA价值成为这是旧的数据,和用户的价值是成功复制到copyuser。

当改变按钮被点击的用户和用户become'is改变的价值观,和copyuser值没有改变。此时,输入的输入框中更改值,用户user1的值都发生了变化,表明这两个是参考相同的变量,copyuser做不改变。

angular.copy可以取消双向结合的原则



这与Javascript中的引用类型有关。

javascript中的值类型

在Javascript中,值分为两种类型:原始值和引用值。

原始值:存储在堆栈中的简单数据字段,也就是说,它们的值直接存储在变量访问的位置;

引用值:存储在堆中,即存储在变量上的值是指针,指向存储对象的内存。

如下图所示:




Javascript中的对象是引用值,这意味着对象通过引用传递值。

所以在上面的代码中:

对象scope.user美元美元和scope.user1值都指向同一个参考。角,听众变化监测的对象引用的地址,所以当参考值的变化的对象,所有的对象都指向它会跟着改变。

因此,在角的情况下,双向绑定不能直接通过对象的分配来解除,所以移除双向绑定的方法是创建一个新对象,然后将原始对象的值赋给新对象,这不是Javascript的深层副本。

是的,angular.copy是深拷贝的角的方法。所以复制对象的angular.copy能与原对象的值的一致性,并不是指与旧对象相同的参考,从而实现对目标变量的双向绑定。

总结

以上就是本文的全部内容。希望本文的内容可以帮助你学习或使用angular.js。如果有任何疑问,你可以留言。