anglejs ng-style: Hintergrundbild funktioniert nicht

Lesezeit: 5 Minuten

Benutzeravatar von Roland
Roland

Ich versuche, ein Hintergrundbild auf ein div anzuwenden, indem ich den Winkel verwende 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="https://stackoverflow.com/questions/17252546/{{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="https://stackoverflow.com/questions/17252546/{{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 jedoch eine Hintergrundfarbe versuche, scheint es gut zu funktionieren. Ich habe auch eine Remote-Quelle und eine lokale Quelle ausprobiert http://lorempixel.com/g/400/200/sports/beides funktionierte nicht.

Benutzeravatar von sqren
quadrat

Es ist möglich, dynamische Werte auf verschiedene Weise zu parsen.

Interpolation mit doppelt geschweiften Klammern:

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

String-Verkettung:

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

ES6-Vorlagenliterale:

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

  • Dies ist eigentlich die beste Antwort (oder zumindest auf mein Problem …)

    – standup75

    7. November 2013 um 3:05 Uhr


  • Sie können auch einen Ausdruck mit geschweiften Klammern schreiben: data-ng-style="{'background-image':'url(img/products/{{product.img}})'}"

    – mykola.rykow

    15. Juni 2014 um 16:01 Uhr


  • Passen Sie auf, wenn Sie eine falsche Syntax verwenden (wie einfache Escape-Anführungszeichen in url()) Der Browser lehnt den Wert möglicherweise ab und setzt ihn nicht.

    Benutzer3638471

    2. September 2016 um 17:29 Uhr

  • Ihre Option hat bei mir nicht funktioniert. aber die 2. Option hat funktioniert. Vielen Dank

    – Joe Naber

    9. März 2017 um 17:54 Uhr

  • erste funktioniert nicht. zweites Werk. beste antwort danke

    – Adesh Kumar

    26. März 2019 um 6:01 Uhr

Korrekte Syntax für background-image ist:

background-image: url("path_to_image");

Die korrekte Syntax für den ng-Stil lautet:

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

  • Übrigens, wie rendere ich so etwas wie: {{products.products[currenRoute].desc}}; im HTML-Format?

    – Roland

    22. Juni 2013 um 17:17 Uhr

  • Ich nehme an currentRoute ist eine Produkt-ID aus der Route? Wenn dies der Fall ist, enthält der $routeParams-Dienst, wenn Sie ihn in Ihren Controller einfügen, den Verweis auf Ihre ID ($scope.productId = $routeParams.id), vorausgesetzt, Ihre Route ist als „/products/:id“ definiert. Aber vielleicht möchten Sie dafür eine neue Frage eröffnen.

    – Stewie

    22. Juni 2013 um 17:21 Uhr

  • Sowas ähnliches habe ich aber schon im Zugriff currenRoute. Es ist eine Zeichenfolge, also habe ich eine Liste von Produkten: snippi.com/s/rznpfvo ; und meine currentRoute Es ist eine Zeichenfolge, die mit einer der IDs in der Produktliste übereinstimmt. Und da kann ich nicht {{products.products.currenRoute.desc}} Ich muss einen anderen Weg finden …

    – Roland

    22. Juni 2013 um 17:29 Uhr

  • Verwenden Sie zum Beispiel unterstrich.jsin Ihrem Controller: $scope.product = _($scope.products).findWhere({id: $scope.currentRoute})und dann aus Ihrer Sicht: <span>{{product.title}}</span>. Aber lassen Sie uns Kommentare nicht als Chat verwenden. Stellen Sie eine neue Frage.

    – Stewie

    22. Juni 2013 um 17:35 Uhr

WENN Sie Daten haben, warten Sie auf die Rückgabe des Servers (item.id) und haben ein Konstrukt wie dieses:

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

Stellen Sie sicher, dass Sie so etwas wie hinzufügen ng-if="item.id"

Andernfalls haben Sie entweder zwei Anforderungen oder eine fehlerhafte.

Benutzeravatar von Taku
Taku

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 + ')'
    }
}

Das hat bei mir funktioniert, geschweifte Klammern sind nicht erforderlich.

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

Notification.icon ist hier eine Scope-Variable.

Benutzeravatar von Mohammed Amine
Mohammed Amine

Wenn wir einen dynamischen Wert haben, der in ein CSS-Hintergrund- oder Hintergrundbild-Attribut eingefügt werden muss, kann es etwas schwieriger sein, ihn anzugeben.

Nehmen wir an, wir haben eine getImage()-Funktion in unserem Controller. Diese Funktion gibt einen ähnlich formatierten String zurück: url(icons/pen.png). In diesem Fall wird die ngStyle-Deklaration genauso angegeben wie zuvor:

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

Achten Sie darauf, den Schlüsselnamen des Hintergrundbilds in Anführungszeichen zu setzen. Denken Sie daran, dass dies als gültiger Javascript-Objektschlüssel formatiert sein muss.

Benutzeravatar von Ezequiel
Ezequiel

Nur für die Datensätze können Sie Ihr Objekt auch so 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 Ihren Stil dynamisch ändern.

1406300cookie-checkanglejs ng-style: Hintergrundbild funktioniert nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy