我的基本结构是

<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秒更新一次,以防止摘要循环中断。



没有检查语法

09-15 13:35