javascript – Angular中数组的异步更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Angular中数组的异步更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2255字,纯文字阅读大概需要4分钟。
内容图文
![javascript – Angular中数组的异步更新](/upload/InfoBanner/zyjiaocheng/809/9a6a395b7f424885baf4a0a8a635c6c8.jpg)
我有一个视图,我在哪里呈现推文.在推文内部,有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 [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的值(因此,将抛出undefined的错误).我通过将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;
});
我意识到这只是一个让它工作的黑客,但是有更聪明的方法吗?
解决方法:
每当调用一个函数时,你必须记住,当它被执行时,范围内的所有变量(不仅是$scope,还有外部变量,如i)由外部函数创建,对于函数是可见的,我想你已经意识到了这个,重要的是要实现的是你实际上并不需要我处理器.然后你需要获取索引i的内容但是你如何摆脱这种依赖?我提出两种可能的解决方案
1)
function getAvatar(name, contentToUpdate) {
return UserAvatar.get(name)
.then(function (data) {
contentToUpdate.thumb = data.avatar;
contentToUpdate.show = true;
});
}
for(var i = 0; i < data.length; i++) {
if(data[i].user_mentions[0]) {
getAvatar(data[i].user_mentions[0].screen_name, $scope.content[i]);
}
}
当调用.then函数的处理程序时,i依赖项不再存在
2)
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(content) {
return function (data) {
content.thumb = data.avatar;
content.show = true;
}
})($scope.content[i]));
}
}
在这个解决方案中,IIFE返回一个将作为处理程序的函数,但是IIFE实际上会捕获正在分析的内容的值,因此当返回内部函数(这是.then的onFulfilled处理程序)被调用时,没有i依赖
额外奖励:一个帮助我处理功能的规则如下:
A function will be executed in the place it was defined
我不记得我在哪里阅读它,我认为这是在尼古拉斯扎卡斯的Professional JavaScript for Web Developers,强烈推荐:)
内容总结
以上是互联网集市为您收集整理的javascript – Angular中数组的异步更新全部内容,希望文章能够帮你解决javascript – Angular中数组的异步更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。