anglejs ng-style: background-image không hoạt động


76

Tôi đang cố gắng áp dụng hình nền cho một div bằng cách sử dụng góc ng-style(tôi đã thử một lệnh tùy chỉnh trước đó với cùng một hành vi), nhưng nó dường như không hoạt động.

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

Mặc dù vậy, nếu tôi thử một màu nền, nó có vẻ hoạt động tốt. Tôi đã thử một nguồn từ xa và một nguồn cục bộ http://lorempixel.com/g/400/200/sports/, đều không hoạt động.

Câu trả lời:


114

Cú pháp đúng cho background-imagelà:

background-image: url("path_to_image");

Cú pháp đúng cho ng-style là:

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

btw, làm thế nào để tôi hiển thị một cái gì đó như {{products.products[currenRoute].desc}}:; trong html?
Roland

Tôi cho rằng currentRoutelà một ID sản phẩm từ tuyến đường? Nếu đúng như vậy thì dịch vụ $ routeParams, nếu bạn đưa nó vào bộ điều khiển của mình, sẽ giữ tham chiếu đến id ( $scope.productId = $routeParams.id) của bạn, cho rằng tuyến đường của bạn được xác định là '/ products /: id'. Nhưng bạn có thể muốn mở một câu hỏi mới cho điều đó.
Stewie

Một cái gì đó như vậy, nhưng tôi đã có quyền truy cập vào currenRoute. Đó là một chuỗi, vì vậy tôi có một danh sách các sản phẩm: snippi.com/s/rznpfvo ; và của tôi currentRouteđó là một chuỗi khớp với một trong các id trong danh sách sản phẩm. Và vì tôi không thể làm được, {{products.products.currenRoute.desc}}tôi phải tìm cách khác ...
Roland

Sử dụng, ví dụ underscore.js , trong điều khiển của bạn: $scope.product = _($scope.products).findWhere({id: $scope.currentRoute}), và hơn theo quan điểm của mình: <span>{{product.title}}</span>. Nhưng chúng ta đừng sử dụng bình luận như một trò chuyện Đăng một câu hỏi mới.
Stewie

186

Có thể phân tích cú pháp các giá trị động theo một vài cách.

Nội suy với dấu ngoặc nhọn kép:

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

Nối chuỗi:

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

Các ký tự mẫu ES6:

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

13
Đây thực sự là câu trả lời tốt nhất (hoặc ít nhất cho vấn đề của tôi ...)
standup75

5
Ngoài ra bạn có thể viết một biểu thức sử dụng dấu ngoặc nhọn:data-ng-style="{'background-image':'url(img/products/{{product.img}})'}"
mykola.rykov

Hãy lưu ý, nếu bạn đang sử dụng cú pháp không chính xác (như dấu ngoặc đơn thoát bên trong url()), trình duyệt có thể từ chối giá trị và không đặt nó.

tùy chọn của bạn không phù hợp với tôi. nhưng tùy chọn thứ 2 DID hoạt động. Cảm ơn
Joe Naber

đầu tiên là không hoạt động. tác phẩm thứ hai. câu trả lời tốt nhất nhờ
Adesh Kumar

15

NẾU bạn có dữ liệu, bạn đang đợi máy chủ trả về (item.id) và có cấu trúc như sau:

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

Hãy chắc chắn rằng bạn thêm một cái gì đó như ng-if="item.id"

Nếu không, bạn sẽ có hai yêu cầu hoặc một yêu cầu bị lỗi.


10

Đối với những người đang đấu tranh để làm cho điều này hoạt động với IE11

HTML

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

JS

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

2
Bạn vừa cứu mạng tôi ngay bây giờ cảm ơn bạn .. Tôi đã dành hàng giờ để cố gắng tìm ra lý do tại sao kiểu ng của tôi không hiển thị trong IE 11. Tôi vẫn không hiểu tại sao nhưng điều này đã hoạt động!
w3bMak3r

Là thứ duy nhất hoạt động trong crom (ubuntu) tất cả các ví dụ khác hoặc "cách chính thức" dường như bị bỏ qua. Phong cách được thay đổi nhưng không có hiệu lực.
davidkonrad

1

Điều này làm việc cho tôi, dấu ngoặc nhọn không bắt buộc.

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

thông báo.icon ở đây là biến phạm vi.


1

Nếu chúng ta có một giá trị động cần đi trong nền css hoặc thuộc tính background-image, thì có thể chỉ định phức tạp hơn một chút.

Giả sử chúng ta có một hàm getImage () trong bộ điều khiển của mình. Hàm này trả về một chuỗi được định dạng tương tự như sau: url (icon / pen.png). Nếu chúng ta làm như vậy, khai báo ngStyle được chỉ định theo cách chính xác như trước:

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

Đảm bảo đặt dấu ngoặc kép xung quanh tên khóa hình nền. Hãy nhớ rằng, điều này phải được định dạng như một khóa đối tượng Javascript hợp lệ.


Nguồn trích dẫn là gì?
Manas

0

Chỉ đối với các bản ghi, bạn cũng có thể xác định đối tượng của mình trong bộ điều khiển như sau:

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

và sau đó bạn có thể xác định một hàm để thay đổi thuộc tính của đối tượng một cách trực tiếp:

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

Làm theo cách đó bạn có thể thay đổi phong cách của mình.


0

Cú pháp được thay đổi cho Angular 2 trở lên:

[ngStyle]="{'background-image': 'url(path)'}"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.