In anglejs haben Sie das Tag ng-src, das den Zweck hat, dass Sie keinen Fehler für eine ungültige URL erhalten, bevor angularjs die zwischen {{
und platzierten Variablen auswerten kann }}
.
Das Problem ist, dass ich einige DIVs mit einem background-image
Satz auf eine URL verwende. Ich mache das wegen der hervorragenden CSS3-Eigenschaft, background-size
die das Bild auf die exakte Größe des DIV zuschneidet.
Das einzige Problem ist, dass ich viele Fehler erhalte, genau aus dem gleichen Grund, aus dem sie ein ng-src-Tag erstellt haben: Ich habe einige Variablen in der URL und der Browser glaubt, dass das Bild nicht existiert.
Mir ist klar, dass es eine Möglichkeit gibt, ein Rohöl zu schreiben {{"style='background-image:url(myVariableUrl)'"}}
, aber das scheint "schmutzig" zu sein.
Ich habe viel gesucht und kann nicht den richtigen Weg finden, dies zu tun. Meine App wird aufgrund all dieser Fehler zu einem Chaos.
Dieser arbeitet für mich
quelle
imgURL
nicht gesetzt zu laden und versucht es erneut, wenn esimgURL
gesetzt wird.Die obige Antwort unterstützt keine beobachtbare Interpolation (und kostet mich viel Zeit beim Debuggen). Der jsFiddle-Link im Kommentar von @BrandonTilley war die Antwort, die für mich funktioniert hat. Ich werde sie hier zur Aufbewahrung erneut veröffentlichen:
Beispiel mit Controller und Vorlage
Controller:
Vorlage :
Verwenden Sie in Vorlage wie folgt:
oder so:
quelle
Es ist auch möglich, so etwas zu tun mit
ng-style
:die nicht versuchen würde, ein nicht vorhandenes Bild abzurufen.
quelle
Ähnlich wie bei Hooblei, nur mit Interpolation:
quelle
<span ng-style="{'background-image': 'url(/styles/images/profile.png)'}" style="background-image: url("");"></span>
. @ Hooblei Ansatz funktioniert.Nur eine Frage des Geschmacks, aber wenn Sie lieber direkt auf die Variable oder Funktion zugreifen möchten:
anstatt so zu interpolieren:
Dann können Sie die Direktive etwas anders definieren,
scope.$watch
was$parse
für das Attribut giltHier gibt es mehr Hintergrundinformationen: AngularJS: Unterschied zwischen den Methoden $ watch und $ watch
quelle
@jaime deine Antwort ist in Ordnung. Wenn Ihre Seite jedoch $ http.get enthält, müssen Sie ng-if verwenden
in der Fabrik
im Controller-Bereich
und die Ansicht, wenn Sie das ng-if wie unten verwenden, erhalten Sie das Bild durch Interpolation. Andernfalls können Sie das Bild nicht erhalten, da die Direktive den Wert vor der HTTP-Anforderung erhält.
quelle
Ich habe mit 1,5 Komponenten festgestellt, dass das Abstrahieren des Stils vom DOM in meiner asynchronen Situation am besten funktioniert.
Beispiel:
Und in der Steuerung sieht so etwas aus:
quelle
Da Sie dies erwähnt haben
ng-src
und es so aussieht, als ob Sie möchten, dass die Seite vor dem Laden Ihres Bildes vollständig gerendert wird, können Sie die Antwort von jaime so ändern, dass die native Direktive ausgeführt wird, nachdem der Browser das Rendern beendet hat.Dieser Blog-Beitrag erklärt dies ziemlich gut; Im Wesentlichen fügen Sie den
$timeout
Wrapper fürwindow.setTimeout
vor der Rückruffunktion ein, in der Sie diese Änderungen am CSS vornehmen.quelle