2013-11-22 10 views
5

Sto utilizzando $resource per recuperare i dati dal server utilizzando la query. Il server restituisce una matrice di oggetti, che memorizzo in stuklijst. Posso inviare il contenuto (aggiornato) di stuklijst al server eseguendo il looping della matrice e utilizzando $ save per inviare ogni elemento dell'array al server. Ora desidero inviare tutti gli elementi (l'intero stuklijst) al server in una volta sola, senza utilizzare il ciclo.

Quando si prova un $ save su stuklijst, Angular genera un errore "destination.push is not a function". Come può essere realizzato con $resource?

Ecco il codice:

Servizio:

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

Controller:

//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}); 
     } ; 
    }; 

dati restituiti dal server e memorizzati in 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

Ancora non trovato un modo per rinviare l'array di array in una volta al server utilizzando $ resource. Dopo alcune ulteriori indagini sono stato in grado di farlo utilizzando $ http. Tuttavia, in tal caso, la bellezza dell'utilizzo di un servizio REST si perde nel processo ... – thomasc

risposta

6

È possibile inviare un schieramento di oggetti ridefinendo la funzione di risorsa save per specificare isArray=true in questo modo:

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

Poi, nel controller, è possibile assemblare la lista e salvare tutto in una richiesta HTTP (meno loquace API):

$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); 

Se si desidera essere ancora in grado di inviare singoli oggetti POST, è possibile utilizzare lo stesso concetto per creare una funzione saveBulk per conservare l'originale save per i singoli oggetti.

Problemi correlati