【发布时间】:2015-07-17 21:41:34
【问题描述】:
所以,我有一个 REST 资源...
/api/Dogs
/api/Dogs/1
/api/Dogs/2
...
狗的样子……
{
Id: 1,
Url: "http://kennelclub/api/Dogs/1",
Name: "Butch"
}
还有像这样的第二个资源......
/api/Owners
/api/Owners/1
....
为方便起见,为了给主人买狗,我有这种查询方法......
/api/Owners/1/Dogs/
现在,很容易让 AngularJS $resource 读取主人的狗,如下...
var ownersDogs = $resource("/api/Owners/:ownerId/Dogs/:dogId", { dogId: "@Id" });
var ownersDogs.query({ ownerId: 1 });
最后一个问题
我想用魔法角度$save 函数对通过此 URL 获得的狗进行更改...
ownersDogs[0].Name = "Barry";
ownersDogs[0].$save();
但是,这里有两个问题……
- 此便利资源 url 是只读的(即不接受 PUT/POST)。
- 即使不是,我也需要将
ownerId重新提供给对象上的$get/$save函数才能正常工作。
如果我想编辑返回的狗,我需要使用/api/Dogs/1 url。这既允许读/写,也不需要 ownerId。你会注意到这个 Url 已经嵌入到返回的 Dog 对象中。
有什么方法可以让返回的对象上的$save、$get 等函数自动(?)使用资源中嵌入的 URL?或者至少,有什么方法可以更改$save 将使用的 URL?
【问题讨论】:
-
在我看来,当我的 URL 过于复杂时,我更喜欢将我的 url 与 $http 调用一起使用,而不是使用 $resource。但这只是问题或口味。你真的想跟上 $resource 的步伐吗?
-
$resource在我看来要干净得多。我特别喜欢它返回将立即使用的对象的方式,然后在不需要任何回调的情况下稍后填充对象。 -
是的,我绝对同意你的看法。 Kenavoz 给出了一个很好的答案。
标签: javascript angularjs rest angularjs-resource