所以,我有一个 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 });
最后一个问题
我想使用神奇的 Angular $save
函数对通过此 URL 获取的狗进行更改...
ownersDogs[0].Name = "Barry";
ownersDogs[0].$save();
但是,这里有两个问题......
- 此便利资源网址是只读的(即不接受 PUT/POST)。
- 即使不是,我也需要将
ownerId
重新提供给对象上的$get
/$save
函数才能正常工作。
如果我想编辑返回的狗,我需要使用 /api/Dogs/1
url。这既允许读/写,又不需要ownerId。您会注意到此 Url 已嵌入到返回的 Dog 对象中。
有什么方法可以让返回对象上的 $save
、$get
等函数自动(?)使用嵌入在资源中的 Url ?或者至少,是否有某种方法可以更改 $save
将使用的 URL?
最佳答案
您可以使用自定义 url 将自定义方法添加到您的资源:
var ownersDogs = $resource("/api/Owners/:ownerId/Dogs/:dogId", { dogId: "@Id" },
{
'savedog': { method : 'PUT', url: '/api/Dogs/:dogId'}
}
);
调用它:
ownersDogs[0].$savedog();
关于javascript - 在 AngularJS $resource 中使用嵌入的资源 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31476006/