2017-02-15 43 views
0

我正在学习angularjs,并且存在使用角库提供的复制和合并功能的问题。根据文档,副本创建源的深层副本,而合并通过从源对象复制自己的可枚举属性深度扩展目标对象。angular.copy和angular.merge之间的区别

Google只提供副本vs扩展或合并vs扩展。我所能找到的是深度复制和递归深度扩展的概念。这两者有什么区别?哪一个比另一个更受欢迎?

我已经创建了plunker,两者都有相同的输出。

https://plnkr.co/edit/CORt259oczKwpBzh7cNH?p=preview

这是片断控制器具有部分:

<script type="text/javascript"> 
    var app= angular.module("myapp",[]); 
    app.controller("myctrl",[function(){ 
     var self = this; 
     self.obj={ 
       val1: 'val1', 
       val2: 'val2', 
       val3: [{a:12, b:13}], 
       val4: {c:23, d:56} 
     }; 

     self.secobj={}; 
     self.thobj={}; 
     self.forobj={}; 

     self.changeVal = function(){ 
      angular.copy(self.obj, self.secobj); 
      angular.extend(self.thobj, self.obj); 
      angular.merge(self.forobj, self.obj); 
      self.obj.val1 = 'value 1'; 
      self.obj.val2 = 'value 2'; 
      self.obj.val3[0].a = 11223; 
      self.obj.val3[0].b = 22334; 
      self.obj.val4.c = 1000; 
      self.obj.val4.d = 5555; 
     }; 


    }]); 
</script> 

回答

1

我看到了可在github上得到更多这方面的见解angularjs的源代码。

Angular.copy只是简单地将对象从源文件复制到目标文件。在该过程中,它会从目标对象中删除所有对象,然后从源复制属性。

另一方面,合并将源对象附加到目标。因此,如果目标对象已经有一些元素,它将保持在那里,源对象的新属性将添加到目标对象。而且,合并支持可以将自己附加到目标对象的多个源对象。

相关问题