ngResource save()奇怪的行为

时间:2015-06-29 11:44:52

标签: angularjs ngresource

有人可以对此有所了解吗?

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

这导致GET到/折扣

然而,这导致POST到/折扣(预期行为)

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

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

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

1 个答案:

答案 0 :(得分: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变量

从文档中引用

  

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

此处有更多详情https://docs.angularjs.org/api/ngResource/service/ $资源 (搜索" paramDefaults")