避免在AngularJS中使用随机内容的无限摘要循环
Avoid Infinite digest loops in AngularJS with random content
我的基本结构是有一个
<img ng-repeat="img in api.images" src="{{ img.url }}">
和api
具有图像id列表,并且必须进行HTTP调用才能从服务器获取每个图像id的URL。但是,这些url具有HMAC签名,因为它们会过期,并且每次发出请求时该签名都会有所不同。因此,api.get_image_urls
调用在执行
get_image_urls: function() {
var deferred = $q.defer();
var that = this;
$http.post(this.url + "image_urls/", {
"image_ids": Object.keys(this.images)
})
.success(function(data) {
for (var image_id in data.images) {
that.images[image_id].url = data.images[image_id];
}
deferred.resolve();
});
return deferred.promise;
}
因此触发无限摘要循环,因为url每次都改变。避免这种情况的最佳策略是什么?
在您的情况下,我会创建一些预构建器。每次当api.images
改变时,消化循环都会触发。要使它工作,运行其他进程延迟,让我们说5秒,并创建api.images
的副本。
类似:
$scope.copyOfImageApi = [];
// run instant loop every 5 sec
var rebuildImages = function() {
/* ... */
$scope.api.images = <get promise from service>
$scope.copyOfImageApi = angular.copy($scope.api.images);
$timeout(rebuildImages, 5000);
}
rebuildImages();
之后:
<img ng-repeat="img in copyOfImageApi" src="{{ img.url }}">
在这种情况下,你的数组将每5秒更新一次,这应该防止摘要循环中断。
<子>没有检查语法子>
相关文章:
- 使用滚动溢出-x进行无限循环
- 从index.html调用函数,该函数无限循环
- 使用jQuery无限循环播放HTML页面幻灯片
- Grunt任务没有加载,获得无限循环
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- jQuery无限循环,动画化许多项目
- 如何避免试图用php+jquery显示php起始页的无限循环
- 6502仿真增强型基本无限循环$C000至$E0ED
- Angular ngRoute导致无限循环和堆栈溢出
- Jquery:无限循环和暂停
- 数组数组:无限循环
- MeteorJS使用流星调用和流星方法时的无限循环
- 如何无限循环数据集字符串
- jquery在无限循环中运行
- 遍历对象会导致无限循环
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- 角度编译指令似乎进入了无限循环
- 显示随机数js的无限循环
- 无限循环一组图像