当前位置: 首页 > 面试题库 >

如何使用angularjs资源处理分页和计数?

司徒云
2023-03-14
问题内容

我必须为输出JSON的API构建一个angularjs客户端,如下所示:

{
  "count": 10,
  "next": null,
  "previous": "http://site.tld/api/items/?start=4"
  "results": [
    {
      "url": "http://site.tld/api/items/1.json",
      "title": "test",
      "description": "",
      "user": "http://site.tld/api/users/4.json",
      "creation_datetime": "2013-05-08T14:31:43.428"
    },
    {
      "url": "http://site.tld/api/items/2.json",
      "title": "test2",
      "description": "",
      "user": "http://site.tld/api/users/1.json",
      "creation_datetime": "2013-05-08T14:31:43.428"
    },
    {
      "url": "http://site.tld/api/items/3.json",
      "title": "test3",
      "description": "",
      "user": "http://site.tld/api/users/2.json",
      "creation_datetime": "2013-05-08T14:31:43.428"
    }
  ]
}

我该如何$resource映射到此?如果使用isArray=false,我会将整个Blob作为一个对象使用,可用于读取,但无法对其进行调用.put()。如果我使用isArray,那将是行不通的。

有什么干净的方法可以做到这一点吗?还是应该回到使用状态$http


问题答案:

您有两种选择。如果可以更改服务器输出,则可以将元信息(计数,下一个,上一个)添加为标头值,而不是将它们添加到响应正文中。

您的第二个选择是使用transformResponse转换响应。在angular
v1.1.2和更高版本(不稳定分支)中,这可以作为$ response配置使用:

var Data = $resource('./data.json',{},{
  list:{isArray:true,method:'get',
    transformResponse: function (data, headers) {
      return JSON.parse(data).results; 
   }}
});

如果您不想使用不稳定分支,也可以更改$ resource使用的$ http:

$http.defaults.transformResponse.push(function(data){
  if(data && data.results){
    return data.results;
  }
});

我用两个示例创建了一个插件:http
://plnkr.co/edit/PmYotP0eo5k41Z6ZCxl4?p=preview

我不确定将元数据传递到应用程序其余部分的最佳方法(如果需要)。您可以将其附加到第一个结果中,或将其添加为单独的对象-可能不太优雅,但可以完成工作。



 类似资料:
  • 问题内容: 我正在尝试将json对象导入变量。我根据教程使用服务。 我收到意外的令牌错误,因为我不应该使用 -但我真的不知道该使用什么。我用谷歌搜索了3个小时,发现只有$ http。或$ json。答案,但是我觉得可以做得更容易-更清晰。 (完美的解决方案是; D 服务文件: 控制器文件: json文件(几乎; D) 编辑: 我将$ resource(’file.json更改为https://ww

  • 问题内容: 我准备使用Java创建文件浏览器。目的是尽可能地模仿默认资源管理器的行为,无论底层操作系统是什么。 我没有用Java完成GUI编程。 我查找了Swing,SWT和JFace,并从本教程开始我的项目:http : //www.ibm.com/developerworks/opensource/library/os- ecgui1/ 我想知道您对解决此问题的最佳方法的看法。如果您可以评论编

  • 问题内容: 当我学到角度时,有两个问题困扰着我: 当用户刷新页面或点击后退按钮时,如何恢复状态? 如何在属于不同控制器的合并范围之间共享数据? 下面我展示了一个使用客户端会话存储的简单解决方案。在用户刷新页面或点击后退按钮后,它既允许共享公共数据,又可以自动恢复状态。 注意:事实证明,以下解决方案对于回答以下问题至关重要: 如何获得“后退”按钮以与AngularJSui路由器状态机一起使用? 问题

  • 问题内容: 我在Android应用程序上使用Retrofit + RxJava,并问自己如何处理API分页以链接调用,直到检索到所有数据。是这样的: 所述ApiResponse对象具有简单的结构: API将返回下一个值,直到最后一页。 有一些好的方法可以做到这一点吗?试图结合一些flatMaps(),但没有成功。 问题答案: 您可以递归建模: 然后,要消耗它, 那应该使您有一个流ResponseO

  • 默认情况下,vue-loader使用css-loader 和Vue模板编译器自动处理你的样式和模板文件。 在这个编译过程中,所有的资源URL,例如 img src="...", background:url(...)和CSS@import被解析为模块依赖。 例如,url(./ image.png)将被翻译为require('./ image.png')和 <img src="../image.pn

  • 所以我正在使用和最新的。 我怀疑DynamoDB如何处理分页?它是否查询DDB并返回第一页的结果,然后再次点击DDB以获取第二次获取的记录?它对数据库的影响是页数的两倍吗?我在AWS文档中找不到任何与此相关的信息。