Ich versuche, ein Hintergrundbild auf ein Div anzuwenden, indem ich angular ng-style
(Ich habe zuvor eine benutzerdefinierte Direktive mit dem gleichen Verhalten ausprobiert), aber es scheint nicht zu funktionieren.
<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>
Wenn ich es mit einer Hintergrundfarbe versuche, funktioniert sie anscheinend einwandfrei. Ich habe versucht, eine Remote-Quelle und eine lokale Quelle zu http://lorempixel.com/g/400/200/sports/
, hat auch nicht funktioniert.
Richtige Syntax für background-image
ist:
background-image: url("path_to_image");
Die korrekte Syntax für ng-style lautet:
ng-style="{'background-image':'url(https://www.google.com/images/srpr/logo4w.png)'}">
Es gibt verschiedene Möglichkeiten, dynamische Werte zu analysieren.
Interpolation mit doppelten geschweiften Klammern:
ng-style="{'background-image':'url({{myBackgroundUrl}})'}"
String-Verkettung:
ng-style="{'background-image': 'url(' + myBackgroundUrl + ')'}"
ES6-Vorlagenliterale:
ng-style="{'background-image': `url(${myBackgroundUrl})`}"
WENN Sie Daten haben, warten Sie auf die Rückgabe des Servers (item.id) und haben ein Konstrukt wie das folgende:
ng-style="{'background-image':'url(https://www.myImageplusitsid/{{item.id}})'}"
Stellen Sie sicher, dass Sie etwas wie ng-if="item.id"
Hinzufügen.
Ansonsten haben Sie entweder zwei Anfragen oder eine fehlerhafte.
Für diejenigen, die Schwierigkeiten haben, dies mit IE11 zum Laufen zu bringen
HTML
<div ng-style="getBackgroundStyle(imagepath)"></div>
JS
$scope.getBackgroundStyle = function(imagepath){
return {
'background-image':'url(' + imagepath + ')'
}
}
Wenn wir einen dynamischen Wert haben, der in ein CSS-Hintergrund- oder Hintergrundbildattribut eingefügt werden muss, kann die Angabe etwas schwieriger sein.
Nehmen wir an, wir haben eine getImage () -Funktion in unserem Controller. Diese Funktion gibt eine Zeichenfolge zurück, die wie folgt formatiert ist: url (icons/pen.png). In diesem Fall wird die ngStyle-Deklaration genauso wie zuvor angegeben:
ng-style="{ 'background-image': getImage() }"
Stellen Sie sicher, dass der Name des Hintergrundbildschlüssels in Anführungszeichen gesetzt ist. Denken Sie daran, dass dies als gültiger JavaScript-Objektschlüssel formatiert sein muss.
Das hat bei mir geklappt, geschweifte Klammern sind nicht erforderlich.
ng-style="{'background-image':'url(../../../app/img/notification/'+notification.icon+'.png)'}"
notification.icon ist hier eine Bereichsvariable.
Nur für die Datensätze können Sie Ihr Objekt auch wie folgt im Controller definieren:
this.styleDiv = {color: '', backgroundColor:'', backgroundImage : '' };
und dann können Sie eine Funktion definieren, um die Eigenschaft des Objekts direkt zu ändern:
this.changeBackgroundImage = function (){
this.styleDiv.backgroundImage = 'url('+this.backgroundImage+')';
}
Auf diese Weise können Sie dinamicaly Ihren Stil ändern.
Die Syntax für Angular wurde geändert:
[ngStyle]="{'background-image': 'url(path)'}"