javascript - AngularJS 检查图像是否有 404 并获取图像 src 的动态 URL

标签 javascript angularjs

这是我的中继器:

<div ng-click="selected(entity)" ng-if="entity.is_organization == true">
    <div class="row">
        <div class="cell info">
            <span class="text" ng-bind-html="entity.label"></span>
        </div>
        <div class="cell img" ng-show="isImageAvailable">
            <img class="image" ng-src="checkImageAvailable(entity.thumbnail[0])">
        </div>
    </div>
</div>

checkImageAvailable 在 Controller 中:

$scope.isImageAvailable = false;
$scope.checkImageAvailable = function(image_url){
  var img = new Image();
  img.onload = function (){
    $scope.isImageAvailable = true;
  };
  img.onerror = function (){
    $scope.isImageAvailable = false;
  };
  img.src = image_url;
  if($scope.isImageAvailable){
     return image_url;
  }
};

我从 JSON 中获取了 entity.thumbnail[0],但即使它有 URL,它也不存在。所以我使用 checkImageAvailable 检查它。如果图像不可用,请将 isImageAvailable 设置为 false,以便图像父容器 ng-show 会在浏览器中隐藏图像占位符。 同时在控制台日志上显示: http://localhost/checkImageAvailable(entity.thumbnail[0])404

我在 AngularJS 面前可能犯的错误是什么。

最佳答案

有一点是错误的,当你设置时:

$scope.isImageAvailable = true; //or false

你在 Angular 生命周期之外 - 所以你必须调用 $scope.$apply();

每当您在 Angular 事件之外更改 Angular 范围时,都必须调用 $apply()

检查 isImageAvailable 可能会错误,因为 onerror/onload 将被异步回调,因此您可以立即返回 image_url

编辑

所以事实证明您必须调用如下方法:

ng-src="{{checkImageAvailable(entity.thumbnail[0])}}"

但是有一个问题,因为 Angular 一直在循环中调用该方法。 即使你这样做:

ng-src="{{::checkImageAvailable(entity.thumbnail[0])}}"

它仍然被调用 3 次。不知道为什么 3.

所以此时我会尝试使用不同的方法:自定义指令。当它初始化时,您将图像设置为隐藏,将 onload/onerror 处理程序附加到元素,然后根据调用哪个处理程序,显示或不显示图像。

如果没有意义,请告诉我。 演示:http://jsbin.com/yenipodimi/1/edit?html,js,output

关于javascript - AngularJS 检查图像是否有 404 并获取图像 src 的动态 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32752423/

相关文章:

javascript - 为什么 Chrome 在包含 Javascript 文件后添加查询字符串参数?

javascript - firebase 不返回 key ?

javascript - $ (':target' ) 在 Internet Explorer 11 中返回长度 0

java - 在 Jhipster 微服务模型上开发面向客户端的 UI 的最佳方法/实践?

javascript - 如何使用 Bower 从 AngularJS I18n 文件中包含特定的语言环境?

javascript - 如何创建需要 uib Typeahead 的 Angular 1.5 自定义指令

javascript - Meteor JS 无法对数据进行排序

javascript - 限制 javascript 变量的最小/最大整数

javascript - 使用 AngularJS 和 Firebase 通过工厂保存项目会引发错误

javascript - jsTree 节点中的 anchor 标记生成错误