ngResource:对特定项目发出POST请求

时间:2014-01-28 14:26:57

标签: angularjs rest angular-resource ngresource

我有一个论坛的基本API:

  • POST /topics(创建新主题)
  • GET /topics(获取所有主题)
  • GET /topics/1(获取ID为“1”的主题)

我想添加以下内容:

  • POST /topics/1(添加对ID为“1”的主题的回复)

我尝试了以下代码(相关摘录),但它没有奏效:

.controller('TopicReplyController', function ($scope, $routeParams, Topics) {
    'use strict';

    var topicId = Number($routeParams.topicId);

    Topics.get({topicId: topicId}, function (res) {
        $scope.topic = res;
    });

    $scope.postReply = function () {
        var newPost = new Topics({
            topicId: topicId
        });

        newPost.text = $scope.postText;
        newPost.$save(); // Should post to /topics/whatever, not just /topics
    };
})
.factory('Topics', function ($resource) {
    'use strict';

    return $resource('/topics/:topicId', {topicId: '@id'});
});

它只是向/topics发出请求,但这不起作用。

我有什么想法可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

来自$resource docs

  

如果参数值以@为前缀,则从数据对象中提取该参数的值(对于非GET操作非常有用).`

您指定topicId将是您正在使用的对象的id

$resource('/topics/:topicId', {topicId: '@id'});
                            // ^^^^^^^^^^^^^^
                            // Here is where you are mapping it

您希望传递id: topicId,以便将id映射到网址中的topicId

var newPost = new Topics({
    id: topicId
});