2016-07-12 37 views
0

Ich habe folgende Fabrik Abfrage an den Server zu senden:Angular Ressource PUT Betrieb mit Payload

app.factory('Request', ['$resource', 
    function ($resource) { 
     var res = $resource("bin/server.fcgi/REST/" + ':resourceName/:ID', {}, { 
       get : { 
        method : 'GET' 
       }, 
       put : { 
        method : "PUT" 
       } 
      }); 
     return { 
      get : function (arguments, b, c) { 
       return res.get(arguments, b, c).$promise; 
      }, 
      put : function(arguments,b,c){ 
       return res.put(arguments, b, c).$promise; 
      } 
     }; 
    } 
]); 

ich es so nennen:

Request[methodName](params).then(successFunction).catch (failFunction); 

jedoch, wenn ich eine PUT-Abfrage senden möchten :

Request["put"](params).then(successFunction).catch (failFunction); 

wo

params = { 
    resourceName : "ATable", 
    ID : 222, 
    AProperty : "changedValue" 
} 

Ich nehme dann folgende Anfrage: (so ein Fehler)

http://myadres.com/REST/ATable/222?AProperty=changedValue 

statt

http://myadres.com/REST/ATable/222 

mit Nutzlast

{ AProperty:changedValue } 

Was ist daran falsch?

+0

werfen Sie einen Blick auf diese Frage http: // stackoverflow.com/questions/38308156/how-to-make-resource-post-call-without-sending-data?noredirect=1#comment64036803_38308156 Ich kommentieren und Sie sollten das gleiche tun - Sie brauchen nicht das "+" – Erez

+0

was meinst du genau? Ich habe einige Versionen Ihrer Antwort versucht, aber keiner von ihnen hat funktioniert. Wenn Sie eine Antwort geben können, können wir sie auf Ihrer Antwort besprechen. – Asqan

+0

zeigen, was Sie – Erez

Antwort

1
app.service('Request', ['$resource',function ($resource) { 
     var res = $resource('bin/server.fcgi/REST/:resourceName/:ID', 
      {resourceName: "@resourceName", ID: "@ID"}, 
      { 
       get : { method : 'GET'}, 
       put : { method : "PUT", params: {resourceName:"@resourceName", ID: "@ID"}//you can leave the string empty if you dont want it to be a defualt value like ID:"" 
      }); 

     this.get = function() { 
      return res.get().$promise; 
     } 
     this.put = function(obj){ 
      return res.put(obj).$promise; // it can be also {like json with your params} 
     } 
]); 

und dann von der Steuerung aufrufen, indem

var obj = { 
    ID:222, 
    resourceName:'ATable' 
} 
Request.put(obj).then(function(data){ 
    //check whats the data 
}) 

dies ist, wie es getan werden sollte, vielleicht nicht der beste Weg, sollte aber funktionieren

+0

Jetzt nehme ich wie folgt vor:' http: //localhost/agenda/bin/server.fcgi/REST/: @ resource/26' seine sehr komisch – Asqan

+0

die Namen müssen gleich sein und wenn es leer ist – Erez

+0

der Name 'resourceName' ist überall gleich? – Asqan