Подтвердить что ты не робот

Как установить фоновое изображение div с ng-style

В основном у меня есть ссылка, и когда она нажата, я показываю модальный. Теперь я могу отображать другие свойства в модальном типе, кроме фонового изображения! urghhh!

Это модальный:

<div class="modalContainer" ng-style="{'background-image':'url({{selectedMeal.url}})'}">

                <div id="modalHeader"> 
                <div style="padding-top: 10px;">{{selectedMeal.title}}</div>

                </div>
</div>

Это ссылки:

<div ng-click='selectMeal(meal)' class="contentItem" ng-repeat='meal in recipes | filter:searchText' ng-style="{'background-image':'url({{ meal.url }})'}">
                    <span id="contentItemHeader">{{ meal.title }}</span>
                    <span id="contentItemLevel">{{ meal.level }}</span>
</div>

JSON:

recipes:[
    {
      "type": "Breakfast",
      "title": "Chili con carne",
      "description": "A spicy and fragrant chili with ground beef, kidney beans, tomatoes, onions and garlic. Best served over rice with a dollop of sour cream and some cheese on top.",
      "ratings": 4,
      "duration": 12,
      "level":"medium",
      "url":"http://31.media.tumblr.com/bc0ea7c5f95701bff499f78b59d23e68/tumblr_mr74z9Lt3O1rs0z5go1_500.jpg",
      "ingredients": 
          [
            {
              "vegetable": "40ml"
            }
          ],
      "method": 
          [
            {
              "1": "In a medium sized stock pot, heat the oil over  heat. Saute onions, chile peppers andgarlic until soft."
            }
          ]
    },

    {
      "type": "Breakfast",
      "title": "Spicy Noodle",
      "description": "A spicy and fragrant chili with ground beef, kidney beans, tomatoes, onions and garlic. Best served over rice with a dollop of sour cream and some cheese on top.",
      "ratings": 5,
      "duration": 30,
      "level":"hot",
      "url":"http://38.media.tumblr.com/875b5eeb5b1efa37d2e9d36fbad836d3/tumblr_mzczesVrZD1rimr6yo1_1280.jpg",
      "ingredients": 
          [
            {
              "vegetable": "40ml"
            }
          ],
      "method": 
          [
            {
              "1": "In a  sized stock pot, heat the oil over  heat. Saute onions, chile peppers andgarlic until soft."
            }
          ]
    }]
4b9b3361

Ответ 1

Вы сделали некоторые ошибки, используя одинарные кавычки, вам нужно взять переменную за пределами одиночных кавычек.

Для этого div

<div class="modalContainer" ng-style="{'background-image':'url({{selectedMeal.url}})'}">

Эта часть рассматривается как строка

'url({{selectedMeal.url}})'

В то время как вы захотите angular проанализировать эту переменную

{{selectedMeal.url}}

Чтобы решить эту проблему, правильный синтаксис

<div class="modalContainer" 
  ng-style="{'background-image': 'url(' + selectedMeal.url + ')'}">

Ответ 2

Правильный синтаксис для фонового изображения:

background-image: url("src");

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

 <div ng-style="{'background-image':'url({{re.url}})'}" ></div>

, например:

<div ng-repeat="re in recipes">
<div ng-style="{'background-image':'url({{re.url}})'}" style="height: 100px"></div>
</div>

JSFiddle: http://jsfiddle.net/U3pVM/7194/

также Вы можете использовать настраиваемую директиву:

app.directive('backgroundImageDirective', function () {
    return function (scope, element, attrs) {
        element.css({
            'background-image': 'url(' + attrs.backgroundImageDirective + ')',
            'background-repeat': 'no-repeat',
        });
    };
});

, например:

<div ng-repeat="re in recipes">
<div background-image-directive="{{re.url}}" style="height: 100px"></div>
</div>

JSFiddle: http://jsfiddle.net/U3pVM/7193/

Обновление:

<div ng-style="'{{re.url}}' != '' && {'background-image':'url({{re.url}})'}" style="height: 100px"></div>

который не попытался бы получить несуществующее изображение.

Ответ 3

Это работа для меня. Если вы извлекаете данные из json или других, попробуйте это

<div class="your-class" [style.background-image]="'url(' + url.image + ')'" [ngStyle]="{  'background-size': 'cover','background-repeat': 'no-repeat'} ">

Ответ 4

Также вы можете использовать

<div ng-repeat="re in recipes">
 <div style="background-image:url({{re.url}} || default-background.png);height: 100px;"></div>
</div>