我的基本结构是
<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秒更新一次,以防止摘要循环中断。
没有检查语法