【发布时间】:2014-04-20 19:26:39
【问题描述】:
是否可以通过给定的 url 检查图像是否存在并且它是图像资源?
例如:
angular.isImage('http://asd.com/asd/asd.jpg')
或者它只是服务器端的东西?
NO JQUERY,请我不使用它
【问题讨论】:
标签: javascript angularjs image
是否可以通过给定的 url 检查图像是否存在并且它是图像资源?
例如:
angular.isImage('http://asd.com/asd/asd.jpg')
或者它只是服务器端的东西?
NO JQUERY,请我不使用它
【问题讨论】:
标签: javascript angularjs image
您可以使用ng-src
<img ng-src="" />
另一种方法是使用http 模块检查它是否存在。
var app = angular.module('myapp', []).run(function($http){
$http.get('http://asd.com/asd/asd.jpg',
//success
function(data){
};
});
更新:
HTML
<div ng-controller="Ctrl">
<img ng-src="{{src}}" isImage />
</div>
JS
var app = angular.module('app', []);
app.directive('isImage', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('load', function() {
alert('image is loaded');
});
}
};
});
app.controller('Ctrl', function($scope) {
$scope.src ="http://asd.com/asd/asd.jpg";
});
【讨论】:
我认为最好的 javascript 方法是将 HTMLImageElement 对象与延迟对象一起使用:
function isImage(src) {
var deferred = $q.defer();
var image = new Image();
image.onerror = function() {
deferred.resolve(false);
};
image.onload = function() {
deferred.resolve(true);
};
image.src = src;
return deferred.promise;
}
用法:
isImage('http://asd.com/asd/asd.jpg').then(function(test) {
console.log(test);
});
使用HTMLImageElement给你带来一些好处:它不仅测试文件是否可下载,而且它是可以通过img标签显示的有效图片资源。
我将此代码包装在简单的服务中以进行测试,它似乎可以工作:
app.controller('MainCtrl', function($scope, Utils) {
$scope.test = function() {
Utils.isImage($scope.source).then(function(result) {
$scope.result = result;
});
};
});
app.factory('Utils', function($q) {
return {
isImage: function(src) {
// ... above code for isImage function
}
};
});
【讨论】:
isImage()有错字;在onerror 和onload 中都使用resolve()。第一个应该是reject()。除此之外,整洁的解决方案。
false 标志)以防图像不可用,我觉得这不是特殊情况,所以解决更好。另外,对于这个功能,为了设置正确的标志$scope.result = result;,同时拥有成功和错误处理程序并不方便。
$q 是什么的人,请参阅:docs.angularjs.org/api/ng/service/$q