Un peu tard à la fête, même si j'ai trouvé une solution à plus ou moins le même problème dans un système que je construis.
Mon idée était, cependant, de gérer CHAQUE img
balise d' image à l'échelle mondiale.
Je ne voulais pas avoir à poivrer mon HTML
avec des directives inutiles, comme err-src
celles montrées ici. Très souvent, en particulier avec des images dynamiques, vous ne saurez pas s'il manque jusqu'à ce qu'il soit trop tard. Ajouter des directives supplémentaires au cas où une image serait manquante me semble exagéré.
Au lieu de cela, j'étends la img
balise existante - ce qui, vraiment, est ce que sont les directives angulaires.
Donc - c'est ce que j'ai trouvé.
Remarque : Cela nécessite que la bibliothèque JQuery complète soit présente et pas seulement le JQlite Angular livré avec car nous utilisons.error()
Vous pouvez le voir en action sur ce Plunker
La directive ressemble à peu près à 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 (qui sera parce que l'image n'existe pas ou est inaccessible, etc.) nous captons et réagissons. Vous pouvez également essayer d'obtenir les tailles d'image - si elles étaient présentes sur l'image / le style en premier lieu. Sinon, définissez-vous une valeur par défaut.
Cet exemple utilise placehold.it pour afficher une image à la place.
Maintenant, CHAQUE image, indépendamment de l'utilisation src
ou ng-src
se couvre au cas où rien ne se charge ...