Für die Anwendung, die ich erstelle, muss mein Benutzer 4 Informationen festlegen, bevor dieses Bild überhaupt geladen werden kann. Dieses Bild ist das Herzstück der Anwendung, sodass der fehlerhafte Bildlink den Eindruck erweckt, dass das Ganze verfälscht ist. Ich hätte gerne ein anderes Bild auf einer 404.
Irgendwelche Ideen? Ich möchte vermeiden, eine benutzerdefinierte Direktive dafür zu schreiben.
Ich war überrascht, dass ich keine ähnliche Frage finden konnte, besonders wenn die erste Frage in den Dokumenten dieselbe ist!
angularjs
angularjs-directive
will_hardin
quelle
quelle
Antworten:
Es ist eine ziemlich einfache Anweisung, auf einen Fehler beim Laden eines Bildes zu achten und den src zu ersetzen. (Plunker)
Html:
Javascript:
Wenn Sie das Fehlerbild anzeigen möchten, wenn ngSrc leer ist, können Sie Folgendes hinzufügen (Plunker) :
Das Problem ist, dass ngSrc das src-Attribut nicht aktualisiert, wenn der Wert leer ist.
quelle
src
Attributen für daserr-src
Bild: plnkr.co/edit/b05WtghBOHkxKdttZ8q5Wenig 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 denerr-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:
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
oderng-src
hat sich selbst abgedeckt, falls nichts geladen wird ...quelle
Um die Jason-Lösung zu erweitern und beide Fälle eines Ladefehlers oder einer leeren Quellzeichenfolge abzufangen, können wir einfach eine Uhr hinzufügen.
Html:
Javascript:
quelle
ng-if
in der Vorlage überprüft werden kann (die leere src-Zeichenfolge)attrs.$observe('ngSrc', function(value) {...});
, das ist, was ngSrc intern anstelle von $ watch verwendetin HTML:
quelle
Wenn image 404 ist oder image null leer ist, was auch immer keine Anweisungen erforderlich sind, können Sie einfach den ng-src-Filter wie diesen verwenden :)
quelle
Ich benutze so etwas, aber es setzt voraus, dass team.logo gültig ist. Es erzwingt die Standardeinstellung, wenn "team.logo" nicht festgelegt oder leer ist.
quelle
Sie brauchen dafür weder Winkel noch CSS oder JS. Wenn Sie möchten, können Sie diese Antwort (verknüpft) in eine einfache Anweisung einschließen, um sie einfacher zu machen, wie oder so, aber es ist ein ziemlich einfacher Vorgang ... wickeln Sie sie einfach in ein Objekt-Tag ein ...
So verbergen Sie ein Bild mit einem fehlerhaften Symbol nur mit CSS / HTML (ohne js)
quelle
Gibt es einen bestimmten Grund, warum Sie das Fallback-Image in Ihrem Code nicht deklarieren können?
Soweit ich weiß, haben Sie zwei mögliche Fälle für Ihre Bildquelle:
Ich denke, dies sollte von Ihrer App erledigt werden. Wenn die richtige URL derzeit nicht ermittelt werden kann, übergeben Sie stattdessen eine URL für das Laden / Fallback / Platzhalterbild.
Der Grund dafür ist, dass Sie nie ein "fehlendes" Bild haben, da Sie explizit die richtige URL angegeben haben, die zu jedem Zeitpunkt angezeigt werden soll.
quelle
Ich schlage vor, dass Sie die Anweisung if if der Angular UI Utils verwenden möchten, um Ihr Problem zu lösen. Diese finden Sie unter http://angular-ui.github.io/. . Ich habe es gerade benutzt, um genau das Gleiche zu tun.
Dies ist ungetestet, aber Sie könnten etwas tun wie:
Controller-Code:
(oder einfacher)
HTML in Ansicht:
<img ui-if="showImage()" ng-src="images/{{data.value}}.jpg" />
Oder noch einfacher: Sie können einfach eine Scope-Eigenschaft verwenden:
Controller-Code:
HTML in Ansicht:
<img ui-if="showImage" ng-src="images/{{data.value}}.jpg" />
<img>
Fügen Sie für ein Platzhalterbild einfach ein anderes ähnliches Tag hinzu, stellen Sie Ihremui-if
Parameter jedoch ein Ausrufezeichen (!
) voran, und lassen Sie ngSrc entweder den Pfad zum Platzhalterbild haben, oder verwenden Sie einfach einsrc
Tag gemäß dem normalen alten HTML- Code .z.B.
<img ui-if="!showImage" src="images/placeholder.jpg" />
Offensichtlich gehen alle oben genannten Codebeispiele davon aus, dass jeder von Wert1, Wert2, Wert3 und Wert4 gleich
null
/ ist,false
wenn jede Ihrer 4 Informationen unvollständig ist (und somit auch einem booleschen Wert vontrue
wenn sie vollständig sind).PS. Das AngularUI-Projekt wurde kürzlich in Unterprojekte unterteilt, und die Dokumentation für
ui-if
scheint derzeit zu fehlen (wahrscheinlich ist sie jedoch irgendwo im Paket enthalten). Wie Sie sehen, ist die Verwendung jedoch recht einfach, und ich habe ein Github-Problem im Angular UI-Projekt protokolliert, um das Team darauf aufmerksam zu machen.UPDATE: 'ui-if' fehlt im AngularUI-Projekt, da es in den AngularJS-Kerncode integriert wurde! Nur ab Version 1.1.x, die derzeit als 'instabil' markiert ist.
quelle
ng-if
schaffte es übrigens in den Kern (ab 1.1.5, wenn ich mich nicht irre).Hier ist eine Lösung, die ich mit nativem Javascript gefunden habe. Ich überprüfe, ob das Bild beschädigt ist, füge dem Bild für alle Fälle eine Klasse hinzu und ändere die Quelle.
Ich habe einen Teil meiner Antwort von einer Quora-Antwort erhalten: http://www.quora.com/How-do-I-use-JavaScript-to-find-if-an-image-is-broken
quelle
Kam mit meiner eigenen Lösung. Es ersetzt das Image sowohl, wenn src oder ngSrc leer sind, als auch wenn img 404 zurückgibt.
(Gabel der @ Darren-Lösung)
quelle
Dadurch kann nur zweimal eine Schleife ausgeführt werden. Um zu überprüfen, ob ng-src nicht vorhanden ist, verwenden Sie err-src. Dadurch wird verhindert, dass die Schleife fortgesetzt wird.
quelle