javascript - 在 AngularJS $resource 中使用嵌入的资源 URL

标签 javascript angularjs rest angularjs-resource

所以,我有一个 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/

相关文章:

javascript - 如何存储用于进行ajax调用的url

javascript - 如何缩短这个JS函数

javascript - 通过 Jquery 仅替换网页上的文本

javascript - ngTable 中带有 Typeahead 和工具提示的 AngularUI,在 scope.isOpen 处未定义自定义 header 长度

android - Azure Cosmos DB - 错误请求 - http :400

javascript - 使用正则表达式转换 JS 中的多项式字符串表示形式

javascript - 如何在 Angular http请求的错误和成功回调之间共享变量

javascript - AngularJS 模块依赖注入(inject)与父模块共享它的依赖

python - 如何安全地将密码发送到 REST 服务?

ios - Swift POST 语句返回 500 状态码