Wenig spät zur Party, obwohl ich eine Lösung für mehr oder weniger das gleiche Problem in einem System gefunden habe, das ich baue.
Meine Idee war jedoch, JEDES Bild- img
Tag global zu handhaben .
Ich wollte meine nicht HTML
mit unnötigen Anweisungen wie den err-src
hier gezeigten überhäufen müssen. Sehr oft, besonders bei dynamischen Bildern, werden Sie nicht wissen, ob es fehlt, bis es zu spät ist. Das Hinzufügen zusätzlicher Anweisungen für die Möglichkeit, dass ein Bild fehlt, scheint mir übertrieben.
Stattdessen erweitere ich das vorhandene img
Tag - worum es bei Angular-Direktiven eigentlich geht.
Also - das habe ich mir ausgedacht.
Hinweis : Dies setzt voraus, dass die vollständige JQuery-Bibliothek vorhanden ist und nicht nur die JQlite Angular-Bibliothek, mit der wir arbeiten.error()
Sie können es in Aktion an diesem Plunker sehen
Die Richtlinie sieht ungefähr so aus:
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');
});
}
}
});
Wenn ein Fehler auftritt (weil das Bild nicht existiert oder nicht erreichbar ist usw.), erfassen wir und reagieren. Sie können auch versuchen, die Bildgrößen zu ermitteln - wenn sie überhaupt auf dem Bild / Stil vorhanden waren. Wenn nicht, setzen Sie sich einen Standard.
In diesem Beispiel wird placehold.it verwendet, damit stattdessen ein Bild angezeigt wird.
Jetzt JEDES Bild, unabhängig von der Verwendung src
oder ng-src
hat sich selbst abgedeckt, falls nichts geladen wird ...