2015-04-29 23 views
24

Tôi muốn nối thêm mảng đối tượng sau với mảng hiện có trong angulaj để thực hiện tải thêm tính năng.Làm thế nào hợp nhất hai mảng đối tượng trong angularjs?

tức là, thêm phản hồi AJAX với câu trả lời hiện tại mỗi lần.

Tôi có một biến, $scope.actions mà chứa sau JSON dữ liệu,

{ 
    "total": 13, 
    "per_page": 2, 
    "current_page": 1, 
    "last_page": 7, 
    "next_page_url": "http://invoice.local/activities/?page=2", 
    "prev_page_url": null, 
    "from": 1, 
    "to": 2, 
    "data": [ 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     }, 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     } 
    ] 
} 

Tôi muốn thêm sau JSON phản ứng mỗi lần biến này.

{ 
    "data": [ 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     }, 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     } 
    ] 
} 

Tôi đã thử với $scope.actions.data.concat(data.data);

nhưng nó không phải đang làm việc và nhận được thông báo lỗi sau

$scope.actions.data.concat is not a function

+0

góc có cả 'extend' và 'copy' sao chép các đối tượng – adeneo

+0

http://stackoverflow.com/questi/19765283/javascript-cannot-to-merge-two-arrays –

+0

Vì biến mới hoàn toàn giống với thuộc tính 'dữ liệu' trong mẫu đầu tiên, một số làm rõ sẽ giúp – charlietfl

Trả lời

35

Bạn có thể sử dụng angular.extend(dest, src1, src2,...);

Trong trường hợp của bạn nó sẽ là:

angular.extend($scope.actions.data, data); 

Xem tài liệu ở đây:

https://docs.angularjs.org/api/ng/function/angular.extend

Ngược lại, nếu bạn chỉ nhận được những giá trị mới từ máy chủ, bạn có thể làm như sau

for (var i=0; i<data.length; i++){ 
    $scope.actions.data.push(data[i]); 
} 
+2

Nó không hoạt động trong trường hợp của tôi .. –

+0

bạn không thể cung cấp thêm thông tin? –

+2

'angular.extend ($ scope.actions, dữ liệu); nó đang thay thế không phụ thêm: ( –

18

này làm việc cho tôi:

$scope.array1 = $scope.array1.concat(array2) 

Trong trường hợp của bạn, nó sẽ là:

$scope.actions.data = $scope.actions.data.concat(data) 
+1

Đây là câu trả lời đúng thực tế. – DavidH

4
$scope.actions.data.concat is not a function 

cùng một vấn đề với tôi nhưng tôi giải quyết vấn đề bằng cách

$scope.actions.data = [].concat($scope.actions.data , data) 
2

Simple

var a=[{a:4}], b=[{b:5}] 

angular.merge(a,b) // [{a:4, b:5}] 

Thử nghiệm trên góc 1.4.1

+2

Không giống như extend(), merge() đệ quy xuống các thuộc tính đối tượng của đối tượng nguồn, thực hiện một bản sao sâu. – Serge

Các vấn đề liên quan