所以,我沿着这些方向有一个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
功能的狗进行更改...
ownersDogs[0].Name = "Barry";
ownersDogs[0].$save();
然而,这里有两个问题......
ownerId
到对象上的$get
/ $save
函数才能正常工作。如果我想编辑返回的狗,我需要使用/api/Dogs/1
网址。这既允许读/写,也不需要ownerId。您会注意到此Url已嵌入返回的Dog对象中。
有什么方法可以让返回对象上的$save
,$get
等函数自动(?)使用资源中嵌入的Url?或者至少,是否有某种方法可以更改$save
将使用的网址?
答案 0 :(得分:2)
您可以使用自定义网址向您的资源添加自定义方法:
var ownersDogs = $resource("/api/Owners/:ownerId/Dogs/:dogId", { dogId: "@Id" },
{
'savedog': { method : 'PUT', url: '/api/Dogs/:dogId'}
}
);
用以下方式调用:
ownersDogs[0].$savedog();
答案 1 :(得分:0)
您可以通过以下方式对$save
进行参数化:
ownerDogs[0].$save(function(ownerObject, putResponseHeaders) {
//ownerObject => saved user object
//putResponseHeaders => $http header getter
});
答案 2 :(得分:0)
我找不到在返回的资源中使用Url参数的方法,但我以不同的方式解决了问题。您可以简单地为保存等操作指定不同的URL,如下所示......
var ownersDogs = $resource("/api/Owners/:ownerId/Dogs/:dogId", { dogId: "@Id" },
{
'save': { method: 'POST', url: '/api/Dogs/:dogId'}
});