javascript - ngclass - ngstyle angularjs




angularjs ng-style: background-image non funziona (5)

Sto provando ad applicare un'immagine di sfondo ad un div usando lo ng-style angolare ng-style (ho provato una direttiva personalizzata prima con lo stesso comportamento), ma non sembra funzionare.

<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>

Però, se provo un colore di sfondo, sembra che funzioni bene. Ho provato una fonte remota e una fonte locale troppo http://lorempixel.com/g/400/200/sports/ , né funzionava.


Se abbiamo un valore dinamico che deve essere inserito in uno sfondo css o in un attributo background-image, può essere solo un po 'più complicato da specificare.

Diciamo che abbiamo una funzione getImage () nel nostro controller. Questa funzione restituisce una stringa formattata simile a questa: url (icons / pen.png). Se lo facciamo, la dichiarazione ngStyle viene specificata nello stesso modo di prima:

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

Assicurati di mettere le virgolette sul nome della chiave dell'immagine di sfondo. Ricorda, questo deve essere formattato come una chiave oggetto Javascript valida.


È possibile utilizzare quanto segue per analizzare i valori dinamici:

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

o in questo modo:

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

Per coloro che stanno lottando per farlo funzionare con IE11

HTML

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

JS

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

Questo ha funzionato per me, non sono necessarie le parentesi graffe.

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

notification.icon qui è variabile di ambito.


Solo per i record puoi anche definire il tuo oggetto nel controller in questo modo:

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

e quindi è possibile definire una funzione per modificare direttamente la proprietà dell'oggetto:

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

Facendolo in questo modo puoi modificare dinamicamente il tuo stile.





ng-style