2016-04-27 6 views
1

Ich habe eine einfache App mit Spring und AngularJS mit CRUD-Funktionen erstellt.AngularJS - Spring MVC Rest: Nicht aktualisieren Objekt nach POST

Jetzt, meine Scope-Variable, die die Arraylist enthält, die ich passiere, wird nicht aktualisiert, wenn ich ein neues erstelle.

Dies ist mein Code für mein AngularJS Controller

$scope.agency = {id: null, name: '', contact: '', employees: []}; 
$scope.agencies = []; 

$scope.getAllAgencies = function() { 
    AgencyService.getAllAgencies() 
     .then(
      function (response) { 
       $scope.agencies = response; 
      } 
     ) 
}; 

$scope.getAllAgencies(); 

$scope.createAgency = function(agency) { 
    AgencyService.createAgency(agency) 
     .then(
       $scope.getAllAgencies(), 
      function(errReponse){ 
       console.error('Error while creating Agency.'); 
      } 
     ); 
}; 

$scope.submit = function() { 
    console.log("Saving new Agency"); 
    $scope.createAgency($scope.agency); 

    $scope.reset(); 
}; 

$scope.reset = function(){ 
    $scope.agency = {id: null, name: '', contact: '', employees: null}; 
    $scope.myForm.$setPristine(); //reset Form 
}; 

Dienst

App.factory('AgencyService', ['$http', '$q', function($http, $q) { 
return { 
    getAllAgencies: function() { 
     return $http.get('/agency') 
      .then(
       function(response) { 
        return response.data; 
       }, 
       function(errResponse){ 
        console.error('Error while fetching agencies'); 
        return $q.reject(errResponse); 
       } 
      ) 
    }, 
    createAgency: function(agency) { 
     console.log("Creating Agency"); 
     return $http.post('/agency', agency) 
      .then(
       function (response) { 
        return response.data; 
       }, 
       function (errResponse) { 
        console.error('Error while create agency'); 
        return $q.reject(errResponse); 
       } 
      ) 
    } 
}; 

}]); 

Und das sind meine Methoden im Frühjahr

Get Agenturen

@RequestMapping(value = "/agency", method = RequestMethod.GET) 
public ResponseEntity<List<Agency>> getAllAgencies() { 
    List<Agency> agencies = agencyService.getAllAgencies(); 
    if (agencies.isEmpty()) { 
     return new ResponseEntity<List<Agency>>(HttpStatus.NO_CONTENT); 
    } 
    return new ResponseEntity<List<Agency>>(agencies, HttpStatus.OK); 
} 

Schaffung Agentur

@RequestMapping(value = "/agency", method = RequestMethod.POST) 
public ResponseEntity<Void> createAgency(@RequestBody Agency agency, UriComponentsBuilder ucBuilder) { 

    if(agencyService.isAgencyExists(agency)) { 
     System.out.println("CONFLICT"); 
     return new ResponseEntity<Void>(HttpStatus.CONFLICT); 
    } 

    agencyService.saveAgency(agency); 

    HttpHeaders headers = new HttpHeaders(); 
    headers.setLocation(ucBuilder.path("/agency/{id}").buildAndExpand(agency.getId()).toUri()); 
    return new ResponseEntity<Void>(headers, HttpStatus.CREATED); 
} 

Hinweis:, dass, wenn ich debuggen, nach der Post-Methode ist es nicht zu meiner get-Methode weiter.

Es gibt keinen Fehler in diesem, wenn ich es neu lade alle einschließlich der, den ich gerade erstellt habe.

Danke!

+0

Ist es wie beim Erstellen einer neuen Agentur, dass die Liste nicht aktualisiert wird? – aksappy

+0

Genau! Das ist mein Problem. Wenn Sie meinen Code sehen, sollte das funktionieren. – Aaron

+0

Müssen Sie wirklich getAllAgentacies nach createAgency() aufrufen? Können Sie nach einer 200 OK-Antwort nicht einfach die gespeicherte Agentur in das vorhandene Array verschieben? – aksappy

Antwort

4

Ich denke, die Agentur Funktionsaufruf erstellen wie unten sein sollte:

$scope.createAgency = function(agency) { 
    AgencyService.createAgency(agency) 
     .then(
       $scope.getAllAgencies, 
      function(errReponse){ 
       console.error('Error while creating Agency.'); 
      } 
     ); 
}; 

erste Parameter in dann sollten die Funktion „$ scope.getAllAgencies“ sein, anstatt Sie den Wert ist vorbei die Funktion „$ Umfang zurückgegeben. getAllAgentures() ".

+0

Es hat funktioniert, das habe ich im Tutorial verpasst. Dank bro! Ich möchte nur fragen, welche ist besser zu benutzen? $ http oder $ ressource? – Aaron

+0

Ich denke, das sollte Ihre Frage beantworten [link] (http://stackoverflow.com/questions/13181406/angularjs-http-and-resource) – Maverick

Verwandte Themen