我正在尝试使用$resource
angular的数据库来将数据发布到嵌套资源。
我的以下嵌套资源event
看起来像是
events/:eventId/match
- POST events/:eventId/match
- GET events/:eventId/match/:matchId
- GET 我设置了一个带角度的服务
app.factory('EventService', ['$resource', function ($resource) {
var Event = $resource('/events/:eventId', {eventId: '@id'},
{
createMatches: {
url: '/events/:eventId/match',
method: 'POST'
}
);
return {
createMatches: function(data,event_id) {
var data.eventId = event_id;
return Event.createMatches(data).$promise;
}
}
});
调用它的地方:
app.controller('EventController', ['$scope','EventService', function($scope,EventService) {
$scope.create = function(event_id,title,description) {
EventService.createMatches({
title:title,
description: description
},event_id).then(function(result) {
console.log('event_created', result);
})
}
}]);
问题
当我将请求发送到服务器时,我希望网址看起来像这样:/events/10/match
但是资源并没有将eventId
添加为url的参数,而是将其添加为请求的参数,因此我的调用失败,因为url看起来像这样:{{ 1}}。
我无法理解为什么它不会将/events/match
绑定到网址。任何建议将不胜感激。
答案 0 :(得分:0)
我相信你错过了第二个参数声明,as per this link for the actions you are defining:
app.factory('EventService', ['$resource', function ($resource) {
var Event = $resource('/events/:eventId', {eventId: '@id'},
{
createMatches: {
url: '/events/:eventId/match',
method: 'POST',
params: {eventId: '@id'}
}
);
return {
createMatches: function(data,event_id) {
var data.eventId = event_id;
return Event.createMatches(data).$promise;
}
}
});