如何处理异步获取的数据
How to process asynchronously fetched data?
我是AngularJS的新手,在页面上显示数据之前,我很难处理从服务器异步获取的数据。
我获取的数据是这样的:
"all_colors":[
{"color":"red","quantity":1},
{"color":"green","quantity":11},
{"color":"yellow","quantity":5}
]
当页面最初加载时,我从服务器上获取上述数据,如下所示:
angular.module('angularDjangoRegistrationAuthApp')
.controller('DashbordCtrl', function ($scope, djangoAuth, Validate, $location) {
djangoAuth.fetch_from_server().then(function(data){
$scope.model = data;
});
我想在页面上展示两件事:
Available Colors: 3
Total Color Quantity: 17
我可以这样显示可用的颜色:
Available Colors: {{model.all_colors.length}}
问题
但是,我如何循环所有颜色并计算每个颜色的数量,以便显示Total Color Quantity
?
在获取数据后,我在JS文件中似乎无法做到这一点,因为它是异步获取的。我想不出该怎么做。
无论您如何获取数据,只要考虑一下您需要显示什么数据-您的ViewModel-并在获取数据时为它们赋值。
在这种情况下,创建一个作用域公开的属性$scope.totalColorQty
,并在收到数据时分配其值:
djangoAuth.fetch_from_server().then(function(data){
$scope.model = data;
$scope.totalColorQty = computeColorQuantity(data.all_colors);
});
function computeColorQuantity(colorsArray){
// do whatever you need to calculate the quantity
}
然后,只需在UI中显示即可:
<div>Total Color Quantity:
<span ng-show="totalColorQty === undefined">Loading...</span>
<span ng-hide="totalColorQty === undefined">{{totalColorQty}}</span>
</div>
一些附加说明:
1) 您可以在作用域上公开computeColorQuantity
并绑定到它。但是,我强烈建议不要这样做,因为这个操作"繁重",并且会在每个消化周期执行,这会让你的整个应用程序变得更慢。
不要这样做:
<div> Total Color Quantity: {{computeColorQuantity(model.all_colors)}}</div>
2) 如果你不需要重新计算这个值,那么你可以绑定一次来减少$watcher的数量:
<span ng-show="totalColorQty">{{::totalColorQty}}</span>
3) 如果您确实打算允许用户更新数据,那么我建议在每个用户启动更改时重新计算数据,例如,通过ng-change
,而不是通过deep$watch
相关文章:
- 异步获取数据使用JavaScript同步获取数据
- 无法使用开放天气图 API 异步获取天气
- 如何处理异步获取的数据
- 在呈现“页面”之前异步获取数据
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- 使用余烬数据如何单独异步获取子项
- 异步获取日期标头
- 异步获取脸书选项卡中的用户数据
- 谷歌地图Javascript API异步获取和动态显示标记
- 在 rails 3.2.2 中使用 $.ajax() 异步获取数据
- 将异步获取的数据传递给子道具
- 异步获取文件夹中的文件
- 使用getScripts异步获取JavaScripts
- react本机异步获取,未定义错误
- 只有当异步获取请求完成时,才能继续循环
- 函数返回一个只能异步获取的值列表
- 异步获取请求返回true
- 返回在函数中异步获取的值
- 嵌套异步获取状态的React组件会导致Flux分发链
- 在javascript中使用for循环创建一个异步获取序列