【发布时间】:2015-03-08 14:35:06
【问题描述】:
我有一个渲染推文的视图。在推文中,有 user_mentions 数组。从这个数组中,我想获取一个用户,向 API 发出另一个请求,获取用户的头像,然后渲染它。 视图如下:
<md-item ng-repeat="item in content">
<div class="md-tile-left" ng-if="item.show">
<img ng-src="{{item.thumb}}" class="face" alt="{{item.name}}">
</div>
<div class="md-tile-content">
{{item.text}}
</div>
</md-item>
content 变量将包含所有推文。最初, content[i].show 对于所有 i 都是假的。控制器代码如下:
for(var i = 0; i < data.length; i++) {
if(data[i].user_mentions[0]) {
UserAvatar.get(data[i].user_mentions[0].screen_name).then(function(data){
$scope.content[i].thumb = data.avatar;
$scope.content[i].show = true;
});
}
}
现在,我面临的问题是,在调用 UserAvatar 服务后,变量 i 会继续递增。因此,在到达回调时,我将拥有 data.length 的值(因此,将抛出未定义的错误)。我通过将 i 传递给 API 然后将其取回找到了解决方法:
UserAvatar.get(data[i].user_mentions[0].screen_name, i).then(function(data){
$scope.content[i].thumb = data.avatar;
$scope.content[i].show = true;
});
我知道这只是一个让它工作的技巧,但有没有更聪明的方法呢?
【问题讨论】:
-
这不是黑客攻击,因为获取头像是异步过程,所以 i 值会增加。如果对您来说变得困难,您也可以使用异步库
-
@MukeshAgarwal:谢谢!所以你认为这是可以在生产环境中使用的东西吗?
标签: javascript angularjs asynchronous