现在我必须调用一个特定的API服务方法,根据“搜索”输入框中的文本发出请求,然后控制器更新$scope.data.
是否可以构建一个自定义过滤器来做到这一点?然后我的观点将完全与服务分离,我可以声明地告诉它如何分组和排序和过滤数据,无论它是在内存中还是来自远程服务器,服务器一次只能提供有限的记录.
后来我也需要分组和排序,我很想下载整个数据集并锁定应用程序的部分负责分组,搜索和排序(直到所有数据都在客户端上),但是:
a)数据集量巨大(数十万条记录)
b)没有人想要处理缓存失效问题
c)这样做真的很错,你真的不希望我把所有数据“保存”在内存中,对吧?
你们能指点我一些开源的例子,我可以从中窃取一些想法吗?
基本上我需要构建一个服务和过滤器,让我可以使用来自api的“可分页”数据,就像在内存数据中一样.
解决方法
您可以在这个领域探索许多解决方案,以下是我发现的有效方法:
> http://kamilkp.github.io/angular-vs-repeat/#?tab=8
> http://www.williambrownstreet.net/blog/2013/07/angularjs-my-solution-to-the-ng-repeat-performance-problem/
> https://github.com/allaud/quick-ng-repeat
您还应该考虑以下内容,它确实有助于处理大量数据.
> https://github.com/Pasvaz/bindonce
更新
我猜你无法真正控制你的服务器输出,因为在服务器端更好地过滤和订购大量数据.
我指出上面的链接,因为即使你编写自己的过滤器(和订单),这很简单 – http://jsfiddle.net/gdefpfqL/ – (按一些公司名称过滤,然后点击“添加更多”按钮 – 添加更多项目).如果您无法控制服务器的数据,那么排序几乎是不可能的 – 唯一的选择是从客户端的内存中获取所有内容,排序然后延迟加载.因此,如果每个列表项都没有自己的多个绑定(如我添加的示例中) – 列表项是相当简单的(例如:您只是将结果显示为纯文本) < li> {{item.name}}< / li>然后,角度ng-repeat可能对您有用.在这种情况下,过滤器将按预期工作 – 假设您按搜索文本过滤:
<li ng-repeat="item in items | filter:searchedText"></li>