Peu en retard à la fête, mais je suis venu avec une solution à plus ou moins le même problème dans un système que je suis en train de construire.
Mon idée était, cependant, de traiter CHAQUE image img
balise dans le monde.
Je ne voulais pas avoir à poivre mon HTML
inutiles directives, telles que l' err-src
ceux illustrés ici. Assez souvent, surtout avec des images dynamiques, vous ne savez pas si il est manquant jusqu'à ce qu'il soit trop tard. Ajout de directives sur la possibilité de l'image est manquante semble exagéré pour moi.
Au lieu de cela, j'ai d'étendre le img
tag - qui, vraiment, est ce Angulaire directives.
- C'est ce que je suis venu avec.
Remarque: Cela nécessite la bibliothèque JQuery pour être présent et pas seulement la JQlite Angulaire est livré avec, parce que nous utilisons .error()
Vous pouvez le voir en action lors de cette Plunker
La directive ressemble plutôt à ceci:
app.directive('img', function () {
return {
restrict: 'E',
link: function (scope, element, attrs) {
// show an image-missing image
element.error(function () {
var w = element.width();
var h = element.height();
// using 20 here because it seems even a missing image will have ~18px width
// after this error function has been called
if (w <= 20) { w = 100; }
if (h <= 20) { h = 100; }
var url = 'http://placehold.it/' + w + 'x' + h + '/cccccc/ffffff&text=Oh No!';
element.prop('src', url);
element.css('border', 'double 3px #cccccc');
});
}
}
});
Lorsqu'une erreur se produit (ce qui sera parce que l'image n'existe pas ou est inaccessible, etc) que l'on capture et de réagir. Vous pouvez tenter d'obtenir la taille d'une image trop s'ils étaient présents sur l'image/le style de la première place. Si non, alors vous fixer une valeur par défaut.
Cet exemple est à l'aide de placehold.pour une image à afficher à la place.
Maintenant, à CHAQUE image, indépendamment de l'utilisation d' src
ou ng-src
a lui-même couvert en cas rien de charges...