指定されたURLによって画像が存在し、それが画像リソースであるかどうかを確認することはできますか?
例えば:
angular.isImage('http://asd.com/asd/asd.jpg')
それともサーバー側のものですか?
JQUERYを使用しないでください
最善の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
}
};
});
ng-srcを使用できます
<img ng-src="" />
もう1つの方法は、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";
});