2017-02-15 45 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只是簡單地將對象從源文件複製到目標文件。在該過程中,它會從目標對象中刪除所有對象,然後從源複製屬性。

另一方面,合併將源對象附加到目標。因此,如果目標對象已經有一些元素,它將保持在那裏,源對象的新屬性將添加到目標對象。而且,合併支持可以將自己附加到目標對象的多個源對象。

相關問題