【问题标题】:image not updating using ng-src in Angular图像未在 Angular 中使用 ng-src 更新
【发布时间】:2013-03-25 10:54:06
【问题描述】:

在我的控制器中,我调用了一个服务。该服务向 PHP 文件发出请求,该文件为我提供了图像的 URL。

原因是图像位于“Media Vault”中,这意味着我需要像这样生成一个散列 URL 才能查看它:

http://xxxx.vo.llnwd.net/o35/s/xxx/test/thumbs/slide1.jpg?e=1365006137&h=5852aeaf5beeeebff05a601801b61568

上面的 URL 已经过期,因此您不会从该特定链接中看到任何内容。

我的图片标签是这样的:

<img id="thumbnail" class="glow" ng-src="{{currentThumb}}" width="200" height="150"/>

我的控制器中的 currentThumb 是:

$scope.currentThumb = ImageService.getImage({
    'type' : 'thumb',
    'index' : $scope.currentIndex + 1,
    'location' : $scope.location
});

我的服务看起来像这样:

app.factory('ImageService', function($http)
{
    var image = null;
    return {
        promise:null,
        getImage: function($data)
        {
            this.promise = $http.post('resources/auth.php',$data, {timeout:20000}).success(function(response)
            {
                image = response;
                log(response);
            })
        }
    }
});

当前ImageService成功返回了一个URL(至少它在控制台中显示了该url)并且在控制台中单击日志结果时,图像加载正常。图像不更新的任何原因?

【问题讨论】:

  • 我试过thumbnail.src = ImageService.getImage({...}); 也没有运气。我得到http://localhost/vjs/undefined 404 not found
  • 收到回复后,如何在getImage() 中添加退货声明。还是你正在兑现你的承诺?
  • 我在设置image = response 后尝试了return image;,但仍然没有。就像$scope.currentThumb = ImageService.getImage({...}); 实际上并没有设置任何东西。一定是我的服务有问题?
  • this.promise 部分呢,您是在调用该方法来解决该承诺吗?尝试单独调用$http.post,而不将其设置为等于this.promise。还包括return image; 部分。
  • 我会做一个小提琴..也许你可以让它以某种方式工作

标签: javascript angularjs


【解决方案1】:

我不确定您需要如何调用它,但另一种可能更好的方法是在控制器的解析块中调用 ImageService.getImage()。这样它就在控制器和视图处理之前全部加载。

jsfiddle

http://jsfiddle.net/HYDmj/1/

查看

<div ng-app="main">
  <div ng-controller="ExampleController">
    <h1>currentThumb</h1>
      <img ng-src="{{currentThumb.data}}">
  </div>
</div>

代码

var app = angular.module('main',[]);

app.factory('ImageService', function($http)
{
    image = null;
    return {
        getImage: function($data)
        {
            image = $http.post('http://dopserv1.dop.com/test/auth.php', $data, {timeout:20000})
            return image
        }
    }
});

function ExampleController($scope, ImageService)
{
    $scope.currentThumb = ImageService.getImage({
        'type' : 'thumb',
        'index' : 1,
        'location' : 'http://digitalout.vo.llnwd.net/o35/s/mobilevforum/test/'
    });
}

【讨论】:

  • 什么是解析块?这些图像是按需加载的。基本上,如果他们将鼠标悬停在一个对象上,取决于它是哪个对象,加载不同的缩略图
  • 哦,好吧,这不是它的用例。不过,这是我关于解决块的几个答案:stackoverflow.com/questions/11972026/…stackoverflow.com/questions/12307501/…
  • 啊,好吧。我明白你的意思。基本上在显示视图之前加载/渲染所有内容。是的,在这种情况下,我不能这样做。再次感谢您的回答。帮了我很大的忙
  • 是的,很高兴为您提供帮助。
猜你喜欢
  • 2016-05-07
  • 2017-05-06
  • 1970-01-01
  • 2014-04-01
  • 2014-11-08
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2014-10-24
相关资源
最近更新 更多