web-dev-qa-db-ja.com

angularjsの2つのオブジェクト配列をどのようにマージしますか?

さらに多くの機能を実装するために、angulajsの既存の配列に次のオブジェクト配列を追加します。

つまり、毎回既存の応答にAJAX応答を追加します。

次のJSONデータを含む$scope.actionsという変数が1つあります。

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

この変数ごとに、次のJSON応答を追加します。

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

$scope.actions.data.concat(data.data);で試しました

しかし、それは機能しておらず、次のエラーメッセージが表示されています

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

27
Muhammed Shihab

angular.extend(dest, src1, src2,...);を使用できます

あなたの場合は次のようになります:

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

こちらのドキュメントをご覧ください。

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

それ以外の場合、サーバーから新しい値のみを取得する場合は、次のことができます

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

これは私のために働く:

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

あなたの場合は次のようになります:

$scope.actions.data = $scope.actions.data.concat(data)
26
mbejda
$scope.actions.data.concat is not a function 

私と同じ問題が、私はによって問題を解決します

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

シンプル

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

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

angular 1.4.1でテスト済み

3