2013-11-22 4 views
5

$resourceを使用して、クエリを使用してサーバーからデータを取得しています。 サーバーは、オブジェクトの配列を返します。オブジェクトの配列は、stuklijstに格納されています。 (更新された)内容をstuklijstに戻すことができます。配列をループし、$ saveを使用して配列の各項目をサーバーに送り返すことでサーバーに戻すことができます。 これで、ループを使用せずにすべてのアイテム(stuklijst)をサーバーに一度に送信したいと考えています。

stuklijstに$ saveを実行すると、Angularは "destination.pushは関数ではありません"というエラーをスローします。 $resourceでこれをどのように達成できますか?

サービス:ここで

コードです

var stukModule = angular.module('stuklijstServices', ['ngResource']) 
stukModule.factory('Stuklijsten', function($resource){ 
return $resource('rest/stuklijsten/:stuklijstID', {}); 
}); 

コントローラー:

//Get the data from server  
    $scope.stuklijst = Stuklijsten.query({stuklijstID: $routeParams.stuklijstID}); 

//See below for sample of data returned by server 
//Users can update the data and request a save using saveStuklijst 

//Send them back to server (using saveStuklijst(Stuklijst)) 
    $scope.saveStuklijst = function(lijst) { 
    //sending items from stuklijst one by one : 
    for(var i = 0; i < lijst.length; i++) 
     {// console.log(i); 
     // console.dir(lijst[i]); 
      lijst[i].RowID = i 
      f = new Stuklijsten(lijst[i]); 
      f.$save({stuklijstID: $routeParams.stuklijstID}); 
     } ; 
    }; 

データは、サーバから返されたとStuklijstに保存されている:

[{"Name":"K FlxMT in DG met diameter 025 cm","LineType":0,"ProdID":"DG025KFLXMT","RowID":7,"Unit":"stk","Quantity":1},{"Name":"SPR Fl in DG met diameter 025 cm","LineType":0,"ProdID":"DG025SPRFL","RowID":8,"Unit":"stk","Quantity":1},{"Name":"T FlxFl in DG met diameter 025 cm","LineType":0,"ProdID":"DG025TFLXFL","RowID":9,"Unit":"stk","Quantity":0},{"Name":"VER PL EX in DG met diameter 025 cm","LineType":0,"ProdID":"DG025VERPLEX","RowID":10,"Unit":"stk","Quantity":0},{"Name":"K FlxMT in PV met diameter 008 cm","LineType":0,"ProdID":"PV008KFLXMT","RowID":11,"Unit":"stk","Quantity":0}] 
+0

$ resourceを使用して、配列の配列をサーバーに戻す方法が見つかりませんでした。さらなる調査の後、私は$ httpを使ってこれを行うことができました。しかし、その場合、RESTサービスを使用することの美しさはプロセスで失われます... – thomasc

答えて

6

あなたはANを送信することができますアレイ

stukModule.factory('Stuklijsten', ['$resource', function ($resource) { 
    return $resource(
     'rest/stuklijsten/:stuklijstID', 
     {}, 
     { 
      save: { 
       method: 'POST', 
       isArray: true 
      } 
     } 
    ); 
}]); 

次に、あなたのコントローラでは、あなたがリストを組み立てることができ、1つのHTTPリクエスト(以下おしゃべりAPI)ですべてを保存します:

ので、同じよう isArray=trueを指定するための再定義、リソースの save機能によって、オブジェクトの
$scope.saveStuklijst = function(lijst) { 
    var some_list = []; 
    for(var i = 0; i < lijst.length; i++) { 
     lijst[i].RowID = i 
     f = new Stuklijsten(lijst[i]); 
     some_list.push({stuklijstID: $routeParams.stuklijstID}); 
    }; 
    Stuklijsten.save(some_list); 

それでも、単一のオブジェクトを投稿することができるようしたい場合は、1つのオブジェクトのためのオリジナルsaveを維持するためにsaveBulk機能を作成するために、同じ概念を使用することができます。