3

How can I preload css background-image's using angularjs promises What I want to do is something that I can use in this way:

link: function(scope, element, attrs){
    element.hide();
    url = attrs.url;
    preload(url).then(function(loadedImageURL){
        element.css({
            background-image: "url('" + loadedImageURL + "')"
        });
    });
    element.fadeIn();
}

Please note that this is not a duplicate question of this one.

Community
  • 1
  • 1
Evan Lévesque
  • 3,115
  • 7
  • 40
  • 61

1 Answers1

7

Try this:

function preload(url) {
  var deffered = $q.defer(),
      image = new Image();

  image.src = url;

  if (image.complete) {

    deffered.resolve();

  } else {

    image.addEventListener('load', function() {
      deffered.resolve();
    });

    image.addEventListener('error', function() {
      deffered.reject();
    });
  }

  return deffered.promise;
}
Ilan Frumer
  • 32,059
  • 8
  • 70
  • 84