web-dev-qa-db-ja.com

angularjs ng-style:背景画像が機能していません

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/、どちらも機能しませんでした。

76
Roland

background-imageの正しい構文は次のとおりです。

background-image: url("path_to_image");

Ngスタイルの正しい構文は次のとおりです。

ng-style="{'background-image':'url(https://www.google.com/images/srpr/logo4w.png)'}">
111
Stewie

動的な値をいくつかの方法で解析することが可能です。

二重中括弧による補間:

ng-style="{'background-image':'url({{myBackgroundUrl}})'}"

文字列連結:

ng-style="{'background-image': 'url(' + myBackgroundUrl + ')'}"

ES6テンプレートリテラル:

ng-style="{'background-image': `url(${myBackgroundUrl})`}"
182
sqren

データがある場合は、サーバーが返されるのを待って(item.id)、次のような構造があります。

ng-style="{'background-image':'url(https://www.myImageplusitsid/{{item.id}})'}"

ng-if="item.id"のようなものを必ず追加してください

それ以外の場合は、2つの要求があるか、1つに障害があります。

15
flaky

IE11でこれを機能させるのに苦労している人のために

HTML

<div ng-style="getBackgroundStyle(imagepath)"></div>

JS

$scope.getBackgroundStyle = function(imagepath){
    return {
        'background-image':'url(' + imagepath + ')'
    }
}
10
tsuz

Css backgroundまたはbackground-image属性に入れる必要のある動的な値がある場合、指定するのはもう少し難しいかもしれません。

コントローラーにgetImage()関数があるとします。この関数は、url(icons/pen.png)のような形式の文字列を返します。その場合、ngStyle宣言は以前とまったく同じ方法で指定されます。

ng-style="{ 'background-image': getImage() }"

背景画像のキー名を引用符で囲んでください。これは、有効なJavascriptオブジェクトキーとしてフォーマットする必要があります。

1
Mohammed Amine

これはうまくいきました。中括弧は必要ありません。

ng-style="{'background-image':'url(../../../app/img/notification/'+notification.icon+'.png)'}"

こちらの通知アイコンはスコープ変数です。

1
mkkhedawat

レコードについては、次のようにコントローラーでオブジェクトを定義することもできます。

this.styleDiv = {color: '', backgroundColor:'', backgroundImage : '' };

そして、オブジェクトのプロパティを直接変更する関数を定義できます:

this.changeBackgroundImage = function (){
        this.styleDiv.backgroundImage = 'url('+this.backgroundImage+')';
    }

そのようにして、スタイルを動的に変更できます。

0
Ezequiel

Angularの構文が変更されました。

[ngStyle]="{'background-image': 'url(path)'}"
0
Maihan Nijat