AngularJS $ resource - 带有id param的POST

时间:2015-07-29 13:50:16

标签: angularjs angular-resource

我有一个angularJS $资源:

$resource("http://localhost:3000/:id",{
   id: '@id'
},
{
   get: {
      method:'GET',
      isArray: false
   },
   foo: {
      method:'POST',
      url: 'http://localhost:3000/:id/foo',
      isArray: false
   }
});

现在,如果我打电话:

User.foo({id:'123', anotherParam: 'bar'});

这会导致调用URL“http://localhost:3000/foo”并将id和anotherParam参数作为POST字段传递。

我实际上希望它调用'http://localhost:3000/123/foo'并仅将anotherParam参数作为POST字段传递。

如何让id参数正常运行?

2 个答案:

答案 0 :(得分:20)

https://docs.angularjs.org/api/ngResource/service/$resource

  

非GET" class" actions:Resource.action([parameters],postData,[success],[error])

你需要这样做:

ValueError: shapes (4,1) and (4,4) not aligned: 1 (dim 1) != 4 (dim 0)

使用单个参数调用函数时。它假定可选参数不存在并将其作为postData发送。

答案 1 :(得分:1)

已接受的解决方案对我不起作用(C:\Program Files (x86)\Notepad++\plugins\APIs\)。 必须手动设置内容类型并转换为表单数据。

样品:

AngularJS v1.4.8

用法:

var DirectoryApi = $resource('api/directories', null, {
    move: {
        url: 'api/directories/:name/_move',
        params: {"name" : "@name"},
        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
        transformRequest: function (param) {
            return $.param(param);
        },
        method: 'POST'
    },
});