繁体   English   中英

在AngularJS中异步加载数据的正确方法

[英]Proper way to asynchronously load data in AngularJS

让我们考虑以下情形:一些数据(JSON格式)需要显示给最终用户。 这样做的通常方法(或者至少是我自己的方法)是使用Angular 工厂返回数据,将工厂包括在控制器中,并使用loop语句/ 指令显示数据。

但是,数据每天都在增长(从数十个增加到数千个),并且在视图中添加了一些精美的动画,从而导致视图的加载时间达到了天空。

通常,有多种加载数据的方式(例如, 延迟加载$ q service ),但我想知道哪种方法更异步地最可靠地提供数据。

如果我正确理解了您的问题,那么您的问题是您要显示大量数据,这可能会在两个地方出错:

问题1: 加载数据

为了保持快速加载,您可以使用分页进行构建,这会将数据分成较小的页面,以保持快速的加载时间。

问题2: $$$$$$$$$$$$

当显示ng-repeat您的$$watchers计数可以非常迅速地增加,这会减慢你的$digest周期大幅,使您的用户界面反应迟钝,为了克服这一点,你可以使用的东西,使用virtualization ,如UI电网 ,这只会在屏幕上呈现部分数据,直到滚动并取消渲染视图之外的所有内容。

除了Martijn Welker的答案以外,这里还有其他几点可能会有所帮助。

1.首先,加载页面后始终获取大数据。 加载页面时,您可以获得诸如全局统计信息之类的小数据(使用解决方法,但表中的数据应始终在页面加载后出现)。 在执行此操作时,为用户提供表格部分的加载图标。

2.您是否直接将数据显示为JSON(例如JSON文件)给用户? 您可以通过逐步显示数据(JSONblob.com所做的事情)来改善这一点。 它显示了顶级键,单击某个键后,会显示下一个键。 您的后端也可以设计为可以针对不同的级别和密钥提出不同的请求。 或者,您可以具有以下标题:

user > profile > eduction

并显示该键的数据,同时使标题可单击。您还可以存储以前的详细信息(小数据),以防用户要返回。

3.尝试使用分页(后端或前端选择)。 如果您不对数据及其只读内容进行任何排序/过滤工作,则可以使用单向绑定(Angular 1.3+)将手表从列表中删除。 即使,我也不知道显示json :)时需要分页。 除此之外,您可以使用plainJs创建此列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM