javascript - 如何使用 ngResource 为集合和单个记录指定不同的 URL

标签 javascript rest angularjs

我正在尝试使用 ngResource 来使用 Firebase Rest API。此 API 使用略有不同的 URL 来检索集合和单个记录。例如,我有一个可以通过以下方式访问的集合:

https://angular-resource-test.firebaseIO.com/systems.json

但是如果我想访问我使用的单个系统:

https://angular-resource-test.firebaseIO.com/systems/1.json

如何在资源声明中为此指定基于参数的 URL?

通常我会做类似的事情

app.factory('System', ['$resource', function($resource) {
  var System = $resource(
    'https://angular-resource-test.firebaseIO.com/systems/:id.json',
    {id: "@id"},
    {update: {method: "PUT"}}
  );
  return System;
}]);

但是集合失败,因为它缺少尾随 .json。或者,当我指定适用于集合的 URL 时,选择单个行的情况会失败。请参阅此 jsfiddle 的示例:

http://jsfiddle.net/D5E6w/15/

最佳答案

有两种方法可以在资源中发送 HTTP GET。

  • get:期望接收一个对象
  • 查询:期望接收一个数组

您的 api 不是很安静,因此,您将需要 2 个资源来执行您想要的操作,因为它们使用不同的 URI(请参阅 Carl 的答案)。我不知道您是否可以编辑 REST 服务,但最好的方法是: https://angular-resource-test.firebaseIO.com/systems/用于查询(需要一个数组) https://angular-resource-test.firebaseIO.com/systems/:id为了得到。 (期望一个对象)

通过此服务,您可以使用您的资源:

var System = $resource(
  'https://angular-resource-test.firebaseIO.com/systems/:id',
  {id: "@id"},
  {update: {method: "PUT"}}
);

你可以这样打电话:

var systems = System.query({});
var system = System.get({id:1});

关于javascript - 如何使用 ngResource 为集合和单个记录指定不同的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15506940/

相关文章:

javascript iframe "top."多个 div?

javascript - D3.js 饼图 II - 来自范围类型输入的动态值

javascript - 如何让这种玻璃 splinter 效果适用于多个 div?

java - Spring 3 - 基于注解的 Bean 验证

javascript - 根据条件隐藏属于循环一部分的项目

angularjs - 我的身份验证 token 拦截器不拦截新路由的请求/响应

javascript - 将 javascript 文件合并到一个文件下

javascript - 嵌套的 if 语句和 && (and) 运算符在这个 for 循环中有何不同?

api - 是否有 Restful 博客 API

java - 编码问题: "São Paulo" becomes "S%C3%A3o%20Paulo" then "São Paulo"