【问题标题】:Seamless Integration with REST API与 REST API 无缝集成
【发布时间】:2014-08-14 14:19:21
【问题描述】:

网上的许多示例向您展示了如何将 ng-repeat 与内存中的数据一起使用,但在我的情况下,我有一个无限滚动的长表,它通过向 REST API 发送请求来获取数据(向下滚动 - 获取一些数据,再次向下滚动 - 获取更多数据等)。它确实有效,但我想知道如何将它与过滤器集成?

现在我必须调用 API 服务的特定方法,该方法根据“搜索”输入框中的文本发出请求,然后控制器更新 $scope.data。

是否可以构建一个自定义过滤器来做到这一点?然后我的视图将与服务完全分离,我可以声明性地告诉它如何对数据进行分组、排序和过滤,无论它是在内存中还是来自远程服务器,服务器一次只能提供有限的记录。

稍后我还需要分组和排序,我很想下载整个数据集并锁定负责分组、搜索和排序的应用程序部分(直到所有数据都在客户端上),但是:

a) 数据集很大(数十万条记录)

b) 没有人愿意处理缓存失效问题

c) 这样做感觉太糟糕了,你不会真的指望我将所有这些数据“保存”在内存中,对吧?

你们能否指出一些开源示例,我可以从中窃取一些想法?

基本上,我需要构建一个服务和过滤器,让我能够处理来自 api 的“可分页”数据,就像它在内存数据中一样。

【问题讨论】:

    标签: angularjs angular-services angular-filters


    【解决方案1】:

    无论您选择如何解决它(有很多方法可以使用 angular 进行无限滚动,这里有一种:http://binarymuse.github.io/ngInfiniteScroll/),在其最新的当前 beta 版本中,ng-repeat 确实糟糕 具有大量数据 - 过滤器也是如此。原因很明显 - 为更改提取如此多的信息是一项艰巨的工作。此外,默认情况下 ng-repeat 会在每次发生变化时重新绘制完整列表。 您可以在该领域探索许多解决方案,以下是我认为富有成效的解决方案:

    1. http://kamilkp.github.io/angular-vs-repeat/#?tab=8
    2. http://www.williambrownstreet.net/blog/2013/07/angularjs-my-solution-to-the-ng-repeat-performance-problem/
    3. https://github.com/allaud/quick-ng-repeat

    您还应该考虑以下几点,这对处理大量数据很有帮助。

    1. https://github.com/Pasvaz/bindonce

    更新
    我猜你不能真正控制你的服务器输出,因为过滤和排序大量数据最好在服务器端完成。

    我指出了上面的链接,因为即使您编写自己的过滤器(和 order-bys),这也很简单 - http://jsfiddle.net/gdefpfqL/ - (按一些公司名称过滤,然后单击“添加更多”按钮 - 到添加更多项目)。
    如果您无法控制来自服务器的数据,则几乎不可能进行排序 - 唯一的选择是获取所有数据,排序,然后从客户端的内存中延迟加载。

    因此,如果您的每个列表项本身没有很多绑定(如我添加的示例中) - 列表项是一个相当简单的列表项(例如:您只需将结果显示为纯文本

  • {{item.name}}
  • 那么 angular ng-repeat 可能对您有用。在这种情况下,过滤器将按预期工作 - 假设您通过搜索文本进行过滤:
    <li ng-repeat="item in items | filter:searchedText"></li>
    

    即使对于在用户搜索文本后添加的项,由于绑定的魔力,它仍然可以工作。

    【讨论】:

    • 好吧,实际上我的问题解决了一些不同的问题......所以假设您在列表中有 500 个项目,您可以使用角度过滤器轻松进行排序和过滤(如果该数据在内存中) .如果该服务一次只为您提供 100 件商品呢?那么你不能轻易地实现过滤器。那么有没有办法构建一个适用于这两种情况的自定义过滤器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2015-01-16
    • 2019-07-14
    相关资源
    最近更新 更多