【问题标题】:ngResource save() strange behaviourngResource save() 奇怪的行为
【发布时间】:2015-06-29 20:01:04
【问题描述】:

有人可以解释一下吗?

var discountResource = $resource(GLOBALS.apiPath + 'discounts/:id');
var discountResponse = discountResource.save($scope.discountForm);

这导致 GET 到 /discounts

但是这会导致 POST 到 /discounts(预期行为)

var discountResource = $resource(GLOBALS.apiPath + 'discounts');
var discountResponse = discountResource.save($scope.discountForm);

我非常坚持这一点,因为我想使用第一个选项,并声明占位符。但是对于我的生活,我无法让它发挥作用。

我想要选项 1 的原因是我可以在工厂中对其进行贴花并将资源注入到我的控制器中。基本上我不想每次需要 API 交互时都重新声明它。我希望这是有道理的。

【问题讨论】:

    标签: angularjs ngresource


    【解决方案1】:

    试试这样的

     Module.factory("Discount", ["$resource", function ($resource) { return $resource(GLOBALS.apiPath + "discounts/:Id", { Id: "@Id" }, {
                somthingCustomIfNeeded: { method: 'POST', url: GLOBALS.apiPath + "something-custom" }
            }); }]);
    

    注意到{ Id: "@Id" } 对象了吗?它告诉 Angular 如何解决 :Id 变量

    引用自文档

    如果参数值以 @ 为前缀,则该参数的值将从数据对象的相应属性中提取(在调用操作方法时提供)。例如,如果 defaultParam 对象是 {someParam: '@someProp'} 那么 someParam 的值将是 data.someProp

    更多细节在这里https://docs.angularjs.org/api/ngResource/service/$resource (搜索“paramDefaults”)

    【讨论】:

    • 先生,您是我的英雄。这完美地工作,但为什么呢?我的印象是 save() 自动是一个 POST。在这种情况下我们需要手动定义它吗?
    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2015-10-27
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    相关资源
    最近更新 更多