76

我正在尝试通过使用角度将背景图像应用于 div 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/,但都不起作用。

4

8 回答 8

189

可以通过几种方式解析动态值。

用双花括号插值:

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

字符串连接:

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

ES6 模板文字:

ng-style="{'background-image': `url(${myBackgroundUrl})`}"
于 2013-10-28T19:00:26.287 回答
114

正确的语法background-image是:

background-image: url("path_to_image");

ng-style 的正确语法是:

ng-style="{'background-image':'url(https://www.google.com/images/srpr/logo4w.png)'}">
于 2013-06-22T17:02:35.853 回答
15

如果您有等待服务器返回的数据 (item.id) 并具有如下构造:

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

确保添加类似ng-if="item.id"

否则,您将有两个请求或一个错误。

于 2014-06-16T15:00:39.073 回答
10

对于那些正在努力使用 IE11 的人

HTML

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

JS

$scope.getBackgroundStyle = function(imagepath){
    return {
        'background-image':'url(' + imagepath + ')'
    }
}
于 2014-11-06T19:26:50.640 回答
1

如果我们有一个动态值需要进入 css 背景或背景图像属性,那么指定它可能会有点棘手。

假设我们的控制器中有一个 getImage() 函数。此函数返回一个格式类似于此的字符串:url(icons/pen.png)。如果我们这样做,ngStyle 声明的指定方式与之前完全相同:

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

确保在背景图像键名周围加上引号。请记住,这必须格式化为有效的 Javascript 对象键。

于 2016-06-13T09:27:56.877 回答
1

这对我有用,不需要花括号。

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

notification.icon 这里是范围变量。

于 2016-01-04T13:11:45.273 回答
0

Angular 2 及更高版本的语法已更改:

[ngStyle]="{'background-image': 'url(path)'}"
于 2019-08-07T15:05:54.900 回答
0

只是为了记录,您还可以像这样在控制器中定义您的对象:

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

然后你可以定义一个函数来直接改变对象的属性:

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

这样做你可以修改你的风格。

于 2015-08-13T21:29:32.820 回答