【问题标题】:ngResource: Making a POST request to a specific itemngResource:向特定项目发出 POST 请求
【发布时间】:2014-02-19 21:49:35
【问题描述】:

我有以下用于论坛的基本 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发出请求,这是行不通的。

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

【问题讨论】:

  • 您要更新 /topics/1 还是创建一个 ID 为 1 的新“主题”?
  • 我想向 ID 为 1 的主题添加新帖子,这需要向 /topics/1 发送 POST 请求。这很不寻常,但它仍然是 RESTful。

标签: angularjs rest angular-resource ngresource


【解决方案1】:

来自$resource docs

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

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

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

您想传递id: topicId,以便它将id 映射到URL 中的topicId

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

【讨论】:

  • 谢谢。我最终不是这样做的——相反,我在一个对象中将它指定为.$save() 中的参数,但我稍后会测试你的是否有效,如果它也有效,则将其标记为解决方案.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2019-03-19
  • 2016-05-30
相关资源
最近更新 更多