Javascript 在AngularJS中异步加载数据的正确方法 让我们考虑下面的场景:一些数据(以JSON格式)需要显示给最终用户。通常的方法(或者至少我自己的方法)是使用角度工厂返回数据,将工厂包含在控制器中并使用循环语句/指令显示数据

Javascript 在AngularJS中异步加载数据的正确方法 让我们考虑下面的场景:一些数据(以JSON格式)需要显示给最终用户。通常的方法(或者至少我自己的方法)是使用角度工厂返回数据,将工厂包含在控制器中并使用循环语句/指令显示数据,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,然而,数据一天比一天大(从几十个增加到数千个),一些奇特的动画被添加到视图中,导致视图的加载时间到达天空 通常,加载数据的方法有很多种(例如),但我想知道哪种方法更接近于异步提供数据的最可靠方法。如果我正确理解您的问题,您的问题是您有大量数据要显示,这可能会在两个地方出错: 问题1:加载数据 为了保持加载速度,您可以使用它构建一些东西,这将把数据分成更小的页面,以保持加载速度 第2期:$$观察者计数 当显示ng repeat时,您的$$watchers计数可能会快速增加,这将大大减慢$diges

然而,数据一天比一天大(从几十个增加到数千个),一些奇特的动画被添加到视图中,导致视图的加载时间到达天空


通常,加载数据的方法有很多种(例如),但我想知道哪种方法更接近于异步提供数据的最可靠方法。

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

问题1:加载数据

为了保持加载速度,您可以使用它构建一些东西,这将把数据分成更小的页面,以保持加载速度

第2期:$$观察者计数


当显示
ng repeat
时,您的
$$watchers
计数可能会快速增加,这将大大减慢
$digest
周期,使您的UI无响应,为了克服这一问题,您可以使用使用
虚拟化
的东西,例如,这只会在屏幕上显示一部分数据,直到滚动并取消显示视图之外的所有内容。

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

问题1:加载数据

为了保持加载速度,您可以使用它构建一些东西,这将把数据分成更小的页面,以保持加载速度

第2期:$$观察者计数


当显示
ng repeat
时,您的
$$watchers
计数可能会快速增加,这将大大减慢
$digest
周期,使您的UI无响应,为了克服这一问题,您可以使用使用
虚拟化
的东西,例如,这只会在屏幕上呈现一部分数据,直到滚动并取消还原视图之外的所有内容。

除了Martijn Welker的回答,这里还有几点可能对您有所帮助

1.第一件事,总是在加载页面后获取大数据。加载页面时,您可以获得诸如全局统计数据之类的小数据(使用resolve thing,但表中的数据应该总是在加载页面之后出现)。执行此操作时,在表部分为用户提供一个加载图标

2.您是否直接将数据作为JSON显示给用户(如JSON文件)?您可以通过增量显示数据(JSONblob.com就是这样做的)来改进这一点。它显示顶级关键点,单击一个关键点,它将给出下一级关键点。您的后端也可以这样设计,您可以为不同的级别和密钥提供不同的请求。或者您可以有如下标题:

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


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

除了Martijn Welker的答案之外,这里还有几点可能对您有所帮助

1.第一件事,总是在加载页面后获取大数据。加载页面时,您可以获得诸如全局统计数据之类的小数据(使用resolve thing,但表中的数据应该总是在加载页面之后出现)。执行此操作时,在表部分为用户提供一个加载图标

2.您是否直接将数据作为JSON显示给用户(如JSON文件)?您可以通过增量显示数据(JSONblob.com就是这样做的)来改进这一点。它显示顶级关键点,单击一个关键点,它将给出下一级关键点。您的后端也可以这样设计,您可以为不同的级别和密钥提供不同的请求。或者您可以有如下标题:

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


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

所以您的问题是如何显示数据,而不是如何加载数据,对吗?确实如此,但我认为需要首先加载数据,不是吗?您考虑过分页吗?(通过服务器)分页,和/或,仅加载您尚未获得的数据,因此通过在后端使用createdon字段来确定与视图相关的新数据?您可以在后端使用类似绑定到分页函数的功能。因此,您的问题是如何显示数据,而不是如何加载数据,对吗?事实上,但我想它需要先加载,不是吗?你考虑过分页吗?(通过服务器)分页和/或,仅加载您尚未获得的数据,因此通过在后端使用createdon字段来确定与视图相关的新数据?您可以在后端使用类似绑定到分页功能的功能。谢谢您的回答!谢谢你的回答!