Angularjs ngResource:在URL而不是正文中发送数据

Angularjs ngResource:在URL而不是正文中发送数据,angularjs,rest,ngresource,Angularjs,Rest,Ngresource,我正试图通过以下方式使用ngResource保存对象: var Tasks = $resource("http://example.com/task", { task: { id: '@id' } }, { 'save': { method: 'POST', params: { key: "abc" } } }); var task = new Tasks(); task.id

我正试图通过以下方式使用ngResource保存对象:

  var Tasks = $resource("http://example.com/task", {
    task: {
      id: '@id'
    }
  }, {
    'save': {
      method: 'POST',
      params: {
        key: "abc"
      }
    }
  });

  var task = new Tasks();
  task.id = "123";
  task.$save();
这将生成此URL:

 http://example.com/task?task=%7B%22id%22:%22@id%22%7D&key=abc

为什么“@id”字符串没有被实际数据替换?为什么没有显示关键参数?

我强烈建议您修改api以不传递json字符串,但如果您必须这样做,您可以执行以下操作

var Tasks = $resource("http://example.com/task", {
  task: '@json'
}, {
  'save': {
    method: 'POST',
    params: {
      key: "abc"
    }
  }
});

var task = new Tasks();
task.id = '123';
task.json = angular.toJson(task);

您的保存方法是“POST”。这就是为什么!顺便说一句,你应该使用POST在服务器上更改某些内容,但永远不会得到。谢谢,但我不明白…我要更改什么来修复此问题?我在这里写的代码是用于添加新任务,而不是获取新任务。我的URL现在包含以下内容:task?id=123&key=abc,这不是API想要的。URL必须包含一个“任务”参数,该参数包含一个ID参数。@fstr因此
@
帮助程序只能在一个级别的深度工作。你必须手工编码。啊,很高兴知道。最干净的是我可以手动操作吗?我可以继续使用$resource吗?@fstr我更新了我的答案,您可能需要使用以下内容。但是,如果可以的话,我会敦促您更改api。好的,谢谢!:)顺便问一下,更改API的理由是什么?他们用不规范的方式做这件事?