需要在URL中将名称定义为ID,并且需要发布包含数据的对象。
$ scope.dvModel.naam是充当ID的名称。 filteredObject显然是包含数据的对象。
这就是我调用该服务的方式,根据一些例子似乎没问题。
saveDVservice.query($scope.dvModel.naam, filteredObject);
这是实际的服务。
.factory('saveDVservice', ['$resource', 'CONSTANTS', function($resource, CONSTANTS) {
'use strict';
return $resource(CONSTANTS.REST_BASE_URL + '/dv/:name', {}, { query: { method: 'POST', isArray: false, headers: { 'Content-Type': 'application/json' }}});
}]);
这是我在查询字符串参数的网络选项卡中看到的: 0:A 1:d 10:N 11:H 12:我 13:L 14:F 15:电子 2:甲 3:C 4: 5:P 6:一个 7:N 8:N 9:电子
这是名称,但看起来像一个数组。
请求有效负载包含正确顺序的实际对象。 可以给我一些关于如何处理这个问题的指导吗?
答案 0 :(得分:1)
据我了解,您希望将$scope.dvModel.naam
放入网址,并希望filteredObject
成为请求有效负载。然后,您需要一个对象,其中包含filteredObject
中的所有内容,并在密钥name
下另外包含等于$scope.dvModel.naam
的值。
此外,您的资源定义可能应该更改 - 在第二个参数$resource
中要求您告诉它从给定对象中提取URL数据的方式:
$resource(CONSTANTS.REST_BASE_URL + '/dv/:name', {name: '@name'}, { query: { method: 'POST', isArray: false, headers: { 'Content-Type': 'application/json' }}});
不幸的是,当您的有效负载数据与URL数据分开时,$resource
不是最好的$http
包装器。也许最好将filteredObject
数据包装在其他对象的有效负载中?然后,您的$resource
对象会更好,例如{name: ..., data: {"0": "A", "1": "D", ...}}
答案 1 :(得分:1)
由于query
的默认操作为{method: 'GET', isArray: true}
,我将其留下并使用其他默认设置save
。这应该是开箱即用的。
app.factory('DVService', function ($resource) {
return $resource(CONSTANTS.REST_BASE_URL + '/dv', {name: '@name'}, {});
});
app.controller('MainCtrl', function ($scope, DVService) {
var postData = {
name: 'name',
fooProp: 'foo',
barProp: 'bar'
};
// save/post
DVservice.save({dv: postData}).$promise.then(function (response) {
console.log(response);
});
//query/get
DVService.query({name: 'name'}).$promise.then(function (response) {
console.log(response);
});
});