W angularjs masz tag ng-src, którego celem jest to, że nie otrzymasz błędu dla nieprawidłowego adresu URL, zanim angularjs będzie mógł ocenić zmienne umieszczone między {{
a }}
.
Problem polega na tym, że używam całkiem sporo DIV z background-image
ustawionym adresem URL. Robię to ze względu na doskonałą właściwość CSS3, background-size
która przycina obraz do dokładnego rozmiaru DIV.
Jedynym problemem jest to, że otrzymuję wiele błędów z tego samego powodu, dla którego utworzyli tag ng-src: mam kilka zmiennych w adresie URL, a przeglądarka uważa, że obraz nie istnieje.
Zdaję sobie sprawę, że jest możliwość napisania prymitywnego {{"style='background-image:url(myVariableUrl)'"}}
, ale to wydaje się „brudne”.
Szukałem dużo i nie mogę znaleźć właściwego sposobu, aby to zrobić. Z powodu tych wszystkich błędów moja aplikacja staje się bałaganem.
Ten działa dla mnie
źródło
imgURL
bez ustawionego i ponawia próbę, gdyimgURL
zostanie ustawiony.Powyższa odpowiedź nie obsługuje obserwowalnej interpolacji (i kosztowała mnie dużo czasu podczas debugowania). Link jsFiddle w @BrandonTilley komentarzu była odpowiedź, że pracował dla mnie, co będę ponownie post tutaj dla zachowania:
Przykład użycia kontrolera i szablonu
Kontroler :
Szablon:
Użyj w szablonie w następujący sposób:
lub tak:
źródło
Można również zrobić coś takiego za pomocą
ng-style
:który nie próbowałby pobrać nieistniejącego obrazu.
źródło
Podobnie jak odpowiedź Hooblei, tylko z interpolacją:
źródło
<span ng-style="{'background-image': 'url(/styles/images/profile.png)'}" style="background-image: url("");"></span>
. Podejście @hooblei zadziałało.tylko kwestia gustu, ale jeśli wolisz mieć bezpośredni dostęp do zmiennej lub funkcji:
zamiast interpolować w ten sposób:
wtedy możesz zdefiniować dyrektywę nieco inaczej, z
scope.$watch
którą zrobi to$parse
na atrybuciewięcej informacji na ten temat można znaleźć tutaj: AngularJS: Różnica między metodami $ observ i $ watch
źródło
@jaime, twoja odpowiedź jest w porządku. Ale jeśli twoja strona ma $ http.get, użyj ng-if
w fabryce
w obszarze kontrolera
a widok, jeśli użyjesz ng-if jak poniżej, otrzymasz obraz przez interpolację, w przeciwnym razie nie możesz uzyskać obrazu, ponieważ dyrektywa pobiera wartość przed żądaniem HTTP.
źródło
Zauważyłem, że z 1.5 komponentami wyodrębnianie stylu z DOM działa najlepiej w mojej sytuacji asynchronicznej.
Przykład:
A w kontrolerze coś takiego:
źródło
Ponieważ wspomniałeś
ng-src
i wygląda na to, że chcesz, aby strona zakończyła renderowanie przed załadowaniem obrazu, możesz zmodyfikować odpowiedź jaime, aby uruchomić natywną dyrektywę po zakończeniu renderowania przez przeglądarkę.Ten post na blogu dość dobrze to wyjaśnia; Zasadniczo, można włożyć
$timeout
opakowanie dowindow.setTimeout
wcześniej funkcji połączenia zwrotnego, w którym można wprowadzać te modyfikacje CSS.źródło