Poco tardi alla festa, anche se ho trovato una soluzione a più o meno lo stesso problema in un sistema che sto costruendo.
La mia idea era, tuttavia, quella di gestire OGNI img
tag immagine a livello globale.
Non volevo esagerare HTML
con direttive inutili, come err-src
quelle mostrate qui. Abbastanza spesso, specialmente con immagini dinamiche, non saprai se manca fino a quando è troppo tardi. L'aggiunta di direttive extra sul caso che manca a un'immagine mi sembra eccessivo.
Invece, estendo il img
tag esistente - che, in realtà, è ciò di cui tratta le direttive angolari.
Quindi - questo è quello che mi è venuto in mente.
Nota : ciò richiede la presenza della libreria JQuery completa e non solo della JQlite Angular perché stiamo usando.error()
Puoi vederlo in azione in questo Plunker
La direttiva si presenta in questo modo:
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');
});
}
}
});
Quando si verifica un errore (che sarà dovuto al fatto che l'immagine non esiste o è irraggiungibile ecc.) Catturiamo e reagiamo. Puoi anche tentare di ottenere le dimensioni dell'immagine, in primo luogo se erano presenti sull'immagine / stile. In caso contrario, imposta te stesso un valore predefinito.
Questo esempio usa invece placehold.it per mostrare un'immagine.
Ora OGNI immagine, indipendentemente dall'uso src
o si ng-src
è coperta nel caso in cui nulla si carichi ...