Angular js - isImage( ) - check if it's image by url

前端 未结 2 567
心在旅途
心在旅途 2020-12-08 15:57

Is it possible to check if by a given url the image exists and it\'s an image resource ?

for example:

angular.isImage(\'http://asd.com/asd/asd.jpg\')         


        
相关标签:
2条回答
  • 2020-12-08 16:37

    I think the best javascript approach would be to use HTMLImageElement object with deferred object:

    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;
    }
    

    Usage:

    isImage('http://asd.com/asd/asd.jpg').then(function(test) {
        console.log(test);
    });
    

    Using HTMLImageElement gives you some benefits: not only it tests that the file is downloadable but also it is valid image resource that can be displayed by img tag.

    I wrapped this code in simple service to make a test and it seems to work:

    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
            }
        };
    });
    

    Demo: http://plnkr.co/edit/u5F6FfO3dEkNSMYV1amo?p=preview

    0 讨论(0)
  • 2020-12-08 16:49

    You can use ng-src

    <img ng-src="" />
    

    Another way is you check if the it exists using the http module.

    var app = angular.module('myapp', []).run(function($http){
      $http.get('http://asd.com/asd/asd.jpg',
        //success
        function(data){
    
        };
    });
    

    Update:

    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";
    });
    
    0 讨论(0)
提交回复
热议问题