angular ng-style
を使用して背景画像をdivに適用しようとしています(以前に同じ動作でカスタムディレクティブを試しました)が、機能していないようです。
<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"
のようなものを必ず追加してください
それ以外の場合は、2つの要求があるか、1つに障害があります。
IE11でこれを機能させるのに苦労している人のために
HTML
<div ng-style="getBackgroundStyle(imagepath)"></div>
JS
$scope.getBackgroundStyle = function(imagepath){
return {
'background-image':'url(' + imagepath + ')'
}
}
Css backgroundまたはbackground-image属性に入れる必要のある動的な値がある場合、指定するのはもう少し難しいかもしれません。
コントローラーにgetImage()関数があるとします。この関数は、url(icons/pen.png)のような形式の文字列を返します。その場合、ngStyle宣言は以前とまったく同じ方法で指定されます。
ng-style="{ 'background-image': getImage() }"
背景画像のキー名を引用符で囲んでください。これは、有効なJavascriptオブジェクトキーとしてフォーマットする必要があります。
これはうまくいきました。中括弧は必要ありません。
ng-style="{'background-image':'url(../../../app/img/notification/'+notification.icon+'.png)'}"
こちらの通知アイコンはスコープ変数です。
レコードについては、次のようにコントローラーでオブジェクトを定義することもできます。
this.styleDiv = {color: '', backgroundColor:'', backgroundImage : '' };
そして、オブジェクトのプロパティを直接変更する関数を定義できます:
this.changeBackgroundImage = function (){
this.styleDiv.backgroundImage = 'url('+this.backgroundImage+')';
}
そのようにして、スタイルを動的に変更できます。
Angularの構文が変更されました。
[ngStyle]="{'background-image': 'url(path)'}"