2015-04-29 30 views
24

Chcę dodać następującą tablicę obiektów do istniejącej w angulajs, aby zaimplementować funkcję ładowania więcej.Jak scalić dwie tablice obiektów w angularjs?

tj. Dołączanie odpowiedzi AJAX z istniejącą za każdym razem.

mam jedną zmienną, która zawiera następujące $scope.actionsJSON danych,

{ 
    "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 
     } 
    ] 
} 

chcę dołączyć następujące JSON odpowiedź za każdym razem ta zmienna.

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

Próbowałem z $scope.actions.data.concat(data.data);

ale to nie działa i się następujący komunikat o błędzie

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

+0

kątowej ma zarówno 'extend' i 'copy', który kopiuje obiekty – adeneo

+0

http://stackoverflow.com/questi ons/19765283/javascript-able-to-merge-two-array –

+0

Ponieważ nowa zmienna jest dokładnie taka sama jak właściwość 'data' w pierwszym przykładzie, niektóre wyjaśnienia pomogłyby – charlietfl

Odpowiedz

35

Można użyć angular.extend(dest, src1, src2,...);

w Twoim przypadku będzie to:

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

zobacz dokumentację tutaj:

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

W przeciwnym razie, jeśli masz tylko nowe wartości z serwera, można wykonać następujące

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

To nie działa w moim przypadku .. –

+0

czy nie możesz podać więcej informacji? –

+2

'angular.extend ($ scope.actions, data); zastępuje nie dołączając :( –

18

Działa to dla mnie:

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

W twoim przypadku będzie to:

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

To jest poprawna odpowiedź. – DavidH

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

sam problem ze mną, ale ja rozwiązać problem

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

Proste

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

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

testowany na kątowej 1.4.1

+2

W przeciwieństwie do extend(), funkcja merge() rekursywnie zstępuje do właściwości obiektu obiektów źródłowych, wykonując głęboką kopię. – Serge