Ответ 1
Правильный синтаксис для background-image
:
background-image: url("path_to_image");
Правильный синтаксис для ng-стиля:
ng-style="{'background-image':'url(https://www.google.com/images/srpr/logo4w.png)'}">
Я пытаюсь применить фоновое изображение к div с помощью angular ng-style
(ранее я пробовал настраиваемую директиву с таким же поведением), но он, похоже, не работает.
<nav
class="navigation-grid-container"
data-ng-class="{ bigger: isNavActive == true }"
data-ng-controller="NavigationCtrl"
data-ng-mouseenter="isNavActive = true; $parent.isNavActive = true"
data-ng-mouseleave="isNavActive = false; $parent.isNavActive = false"
data-ng-show="$parent.navInvisible == false"
data-ng-animate="'fade'"
ng-cloak>
<ul class="navigation-container unstyled clearfix">
<li
class="navigation-item-container"
data-ng-repeat="(key, item) in navigation"
data-ng-class="{ small: $parent.isNavActive, big: isActive == true }"
data-ng-mouseenter="isActive = true; isInactive= false"
data-ng-mouseleave="isActive = false; isInactive= true">
<div data-ng-switch on="item.id">
<div class="navigation-item-default" data-ng-switch-when="scandinavia">
<a class="navigation-item-overlay" data-ng-href="{{item.id}}">
<div class="navigation-item-teaser">
<span class="navigation-item-teaser-text" data-ng-class="{ small: isScandinavia }">{{item.teaser}}</span>
</div>
</a>
<span class="navigation-item-background" data-ng-style="{ 'background-image': 'public/img/products/{{item.id}}/detail/wide/{{item.images.detail.wide[0]}}' }"></span>
</div>
<div class="navigation-item-last" data-ng-switch-when="static">
<div class="navigation-item-overlay">
<div class="navigation-item-teaser">
<span class="navigation-item-teaser-text">
<img data-ng-src="{{item.teaser}}">
</span>
</div>
</div>
<span class="navigation-item-background">
<img class="logo" data-ng-src="{{item.images.logo}}">
</span>
</div>
<div class="navigation-item-default" data-ng-switch-default>
<a class="navigation-item-overlay" data-ng-href="{{item.id}}">
<div class="navigation-item-teaser">
<span class="navigation-item-teaser-text">{{item.teaser}}</span>
</div>
</a>
<span class="navigation-item-background" data-ng-style="{ 'background-image': 'public/img/products/{{item.id}}/detail/wide/{{item.images.detail.wide[0]}}' }"></span>
</div>
</div>
</li>
</ul>
</nav>
Хотя, если я попробую цвет фона, он работает нормально. Я попробовал удаленный источник и локальный источник тоже http://lorempixel.com/g/400/200/sports/
, не работал.
Правильный синтаксис для background-image
:
background-image: url("path_to_image");
Правильный синтаксис для ng-стиля:
ng-style="{'background-image':'url(https://www.google.com/images/srpr/logo4w.png)'}">
Можно проанализировать динамические значения несколькими способами.
Интерполяция с двойными фигурными скобками:
ng-style="{'background-image':'url({{myBackgroundUrl}})'}"
Конкатенация строк:
ng-style="{'background-image': 'url(' + myBackgroundUrl + ')'}"
Литералы шаблона ES6:
ng-style="{'background-image': 'url(${myBackgroundUrl})'}"
ЕСЛИ у вас есть данные, которые вы ожидаете вернуть серверу (item.id) и создадите такую конструкцию:
ng-style="{'background-image':'url(https://www.myImageplusitsid/{{item.id}})'}"
Убедитесь, что вы добавили что-то вроде ng-if="item.id"
В противном случае у вас либо будет два запроса, либо один из них неисправен.
Для тех, кто изо всех сил пытается работать с IE11
HTML
<div ng-style="getBackgroundStyle(imagepath)"></div>
JS
$scope.getBackgroundStyle = function(imagepath){
return {
'background-image':'url(' + imagepath + ')'
}
}
Это сработало для меня, фигурные скобки не требуются.
ng-style="{'background-image':'url(../../../app/img/notification/'+notification.icon+'.png)'}"
notification.icon - это переменная области.
Если у нас есть динамическое значение, которое нужно зайти в фон css или атрибут background-image, это может быть немного сложнее указать.
Допустим, что у нас есть функция getImage() в нашем контроллере. Эта функция возвращает строку, форматированную аналогично следующей: URL (иконки/pen.png). Если мы это сделаем, в объявлении ngStyle указывается точно так же, как и раньше:
ng-style="{ 'background-image': getImage() }"
Обязательно поместите кавычки вокруг имени ключа фонового изображения. Помните, что это должно быть отформатировано как действительный ключ объекта Javascript.
Только для записей вы также можете определить свой объект в контроллере следующим образом:
this.styleDiv = {color: '', backgroundColor:'', backgroundImage : '' };
а затем вы можете определить функцию, чтобы напрямую изменить свойство объекта:
this.changeBackgroundImage = function (){
this.styleDiv.backgroundImage = 'url('+this.backgroundImage+')';
}
Выполняя это, вы можете изменить динамический стиль.
Синтаксис изменен для Angular:
[ngStyle]="{'background-image': 'url(path)'}"