angularjs ng-style: фонове зображення не працює


76

Я намагаюся застосувати фонове зображення до div, використовуючи angular ng-style(раніше я пробував власну директиву з такою ж поведінкою), але, схоже, це не працює.

<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/не працювало.

Відповіді:


114

Правильний синтаксис для background-image:

background-image: url("path_to_image");

Правильним синтаксисом для стилю ng є:

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

btw, як мені зробити щось на зразок {{products.products[currenRoute].desc}}:; у html?
Роланд

Припускаю currentRoute, це ідентифікатор товару з маршруту? Якщо це так, тоді служба $ routeParams, якщо ви введете її у свій контролер, буде містити посилання на ваш ідентифікатор ( $scope.productId = $routeParams.id), враховуючи, що ваш маршрут визначений як '/ products /: id'. Але ви можете відкрити для цього нове питання.
Stewie

Щось подібне, але я вже маю доступ до currenRoute. Це рядок, тому у мене є список продуктів: snippi.com/s/rznpfvo ; а мій currentRouteце рядок, який відповідає одному з ідентифікаторів у списку продуктів. І оскільки я не можу, {{products.products.currenRoute.desc}}мені доводиться шукати інший шлях ...
Роланд

Використовуючи, наприклад , underscore.js , в контролері: $scope.product = _($scope.products).findWhere({id: $scope.currentRoute})і чим , на ваш погляд: <span>{{product.title}}</span>. Але давайте не будемо використовувати коментарі як чат. Опублікувати нове запитання.
Stewie

186

Можна проаналізувати динамічні значення кількома способами.

Інтерполяція за допомогою фігурних дужок:

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

Конкатенація рядків:

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

Літерали шаблонів ES6:

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

13
Це насправді найкраща відповідь (або принаймні на мою проблему ...)
standup75

5
Також ви можете написати вираз за допомогою фігурних дужок:data-ng-style="{'background-image':'url(img/products/{{product.img}})'}"
mykola.rykov

Обережно, якщо ви використовуєте неправильний синтаксис (наприклад, екрановані одинарні лапки всередині url()), браузер може відхилити значення і не встановити його.

ваш варіант не працював для мене. але другий варіант ДІЙСНИЙ працював. Дякую
Джо Набер

перший не працює. друга робота. найкраща відповідь
Адеш Кумар,

15

ЯКЩО у вас є дані, ви чекаєте повернення сервера (item.id) і маєте таку конструкцію:

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

Обов’язково додайте щось на зразок ng-if="item.id"

Інакше у вас буде або два запити, або один несправний.


10

Для тих, хто бореться за роботу з IE11

HTML

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

JS

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

2
Ви просто врятували мені життя прямо зараз, дякую. Я годинами намагався зрозуміти, чому мій нг-стиль не відображався в IE 11. Я все ще не розумію, чому, але це спрацювало!
w3bMak3r

Чи єдине, що працювало і в хромі (ubuntu), всі інші приклади, або "офіційним способом", здається, ігноруються. Стиль змінено, але не має ефекту.
davidkonrad

1

Це спрацювало для мене, фігурні дужки не потрібні.

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

notification.icon тут є змінною області дії.


1

Якщо у нас є динамічне значення, яке потрібно передати в атрибуті css background або background-image, це може бути трохи складніше вказати.

Скажімо, у нашому контролері є функція getImage (). Ця функція повертає рядок, відформатований подібним до цього: url (icons / pen.png). Якщо ми це зробимо, декларація ngStyle вказується точно так само, як і раніше:

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

Обов’язково поставте лапки навколо назви ключа фонового зображення. Пам'ятайте, це має бути відформатовано як дійсний ключ об'єкта Javascript.


Що є джерелом цитування?
Манас,

0

Тільки для записів ви також можете визначити свій об'єкт у контролері так:

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

а потім ви можете визначити функцію для безпосередньої зміни властивості об’єкта:

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

Роблячи це таким чином, ви можете модифікувати динамічно свій стиль.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.