Vue.js привязана к данным стиль backgroundImage не работает

Я пытаюсь связать источник изображения в элементе, но это не похоже на работу. Я получаю "Неверное выражение. Сгенерированное тело функции: {backgroundImage: {url (image)}".

В документации сказано, что нужно использовать "кебаб-кейс" или "верблюжий кейс".

<div class="circular" v-bind:style="{ backgroundImage: { url(image) }"></div>

Вот скрипка: https://jsfiddle.net/0dw9923f/2/

Ответы

Ответ 1

Проблема в том, что значение для backgroundImage должно быть строкой, подобной этой:

<div class="circular" v-bind:style="{ backgroundImage: 'url(' + image + ')' }"></div>

Вот упрощенная скрипка, которая работает: https://jsfiddle.net/89af0se9/1/

Re: комментарий ниже о кебаб-кейсе, вот как вы можете это сделать:

<div class="circular" v-bind:style="{ 'background-image': 'url(' + image + ')' }"></div>

Другими словами, значение для v-bind:style является простым объектом Javascript и следует тем же правилам.

ОБНОВЛЕНИЕ: Еще одно замечание о том, почему у вас могут возникнуть проблемы с этим.

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

url('some/url/path/to/image.jpeg')

В противном случае, если в URL вашего изображения есть специальные символы (например, пробел или скобки), браузер может не применить его должным образом. В Javascript назначение будет выглядеть так:

this.image = "'some/url/path/to/image.jpeg'"

или же

this.image = "'" + myUrl + "'"

Технически это можно сделать в шаблоне, но экранирование, необходимое для поддержания его в правильном HTML, не стоит.

Больше информации здесь: действительно ли нужно указывать значение url()?

Ответ 2

<div class="img-banner" :style="{'background-image': 'url(' + require('./assets/media/baner1.jpg') + ')'}"></div>

Ответ 3

Привязка стиля фонового изображения с использованием динамического значения из цикла v-for может быть выполнена следующим образом.

<div v-for="i in items" :key="n" 
  :style="{backgroundImage: 'url('+require('./assets/cars/'+i.src+'.jpg')+')'}">
</div>

Ответ 4

Для одного повторного компонента эта техника работает для меня

<div class="img-section" :style=img_section_style >

computed: {
            img_section_style: function(){
                var bgImg= this.post_data.fet_img
                return {
                    "color": "red",
                    "border" : "5px solid ",
                    "background": 'url('+bgImg+')'
                }
            },
}

Ответ 5

Я столкнулся с проблемой, когда фоновые изображения с пробелами в имени файла вызывали неприменение стиля. Чтобы исправить это, я должен был убедиться, что путь к строке был заключен в одинарные кавычки.

Обратите внимание на экранирование в моем примере ниже.

<div :style="{
    height: '100px',
    backgroundColor: '#323232',
    backgroundImage: 'url(\'' + event.image + '\')',
    backgroundPosition: 'center center',
    backgroundSize: 'cover'
    }">
</div>

Ответ 6

Другое решение:

<template>
  <div :style="cssProps"></div>
</template>

<script>
  export default {
    data() {
      return {
        cssProps: {
          backgroundImage: 'url(${require('@/assets/path/to/your/img.jpg')})'
        }
      }
    }
  }
</script>

Что делает это решение более удобным? Во-первых, это чище. И затем, если вы используете Vue CLI (я полагаю, вы используете), вы можете загрузить его через веб-пакет.

Примечание: не забывайте, что require() всегда относительно текущего пути к файлу.

Ответ 7

:style="{ backgroundImage: 'url('${src}')' }"