我有一个包含图像的div(用于预览),仅在设置图像src时显示。 我的问题是我得到了404,因为一开始就没有图像集。
<div ng-show="imgSrc" class="preview">
<div class="menu">
<a ng-click="imgSrc = false" class="btn btn-primary">
<i class="fa fa-times"></i>Close</a>
<a class="btn btn-primary" href="{{ imgSrc }}">
<i class="fa fa-download"></i>Download</a>
<img ng-src="{{ imgSrc }}" /> /* <--------------------- here */
</div>
这是一个好方法吗?或者我应该删除图像标记,并在设置img时附加它?在这种情况下,我如何追加元素?
答案 0 :(得分:2)
404表示服务器上不存在图像,但这并不意味着imgSrc
未定义。
如果要在定义imgSrc
之前隐藏元素,请使用nh-show
指令,就像您已经使用的那样。另外,请确保imgSrc
没有默认值。
如果要在UI上显示图像之前检查图像是否存在,则必须对该URL执行ajax请求并检查返回的响应。
同样ng-click="imgSrc = false"
应为ng-click="imgSrc = ''"
。
答案 1 :(得分:1)
好的我理解404的原因。我的imgSrc变量初始化为false,所以它试图加载:
http://localhost:9000/false
一个简单的imgSrc =&#39;&#39;而是解决问题。
答案 2 :(得分:0)
单击关闭链接时,不要将imgSrc
设置为false
,而是将其设置为空字符串。这仍然会导致ng-show
正确隐藏它,但不会导致浏览器尝试抓取http://localhost:9000/false
。
e.g。将您的标记更改为:
<div ng-show="imgSrc" class="preview">
<div class="menu">
<a ng-click="imgSrc = ''" class="btn btn-primary">
<i class="fa fa-times"></i>Close</a>
<a class="btn btn-primary" href="{{ imgSrc }}" target="_blank">
<i class="fa fa-download"></i>Download</a>
<img ng-src="{{ imgSrc }}"></img>
</div>
</div>
答案 3 :(得分:0)
像这样为
创建图像加载指令指令:
app.directive('imageonload', function($rootScope) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('load', function() {
alert('image is loaded');
$rootScope.$broadcast('updateContent');
});
}
};
});
HTML :
<div ng-show="isImage" class="preview">
<div class="menu">
<a ng-click="imgSrc = false" class="btn btn-primary">
<i class="fa fa-times"></i>Close</a>
<a class="btn btn-primary" href="{{ imgSrc }}">
<i class="fa fa-download"></i>Download</a>
<img ng-src="{{ imgSrc }}" imageonload /> /* <--------------------- here */
</div>
contoller:
$scope.$on('updateContent', function () {
console.log('receive');
$scope.isImage = true;
});