web-dev-qa-db-ja.com

AngularJS $ resource-POST with id param

私はangularJS $ resourceを持っています:

$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パラメーターを正しく動作させるにはどうすればよいですか?

10
richwol

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

非GET「クラス」アクション:Resource.action([parameters]、postData、[success]、[error])

あなたがする必要があります:

User.foo({id:'123', anotherParam: 'bar'}, <post data object>);

単一の引数を使用して関数を呼び出す場合。オプションの引数がないことを前提として、postDataとして送信します。

22
DTing

受け入れられた解決策は私にはうまくいきませんでした(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'
    },
});

そして使用法:

function moveDirectory(name, parent, after) {
    return DirectoryApi.move({name: name}, {parent: parent, after: after});
}
1
marknorkin