Le problème est que la valeur de backgroundImage
doit être une chaîne comme celle-ci:
<div class="circular" v-bind:style="{ backgroundImage: 'url(' + image + ')' }"></div>
Voici un violon simplifié qui fonctionne: https://jsfiddle.net/89af0se9/1/
Re: le commentaire ci-dessous sur kebab-case, voici comment vous pouvez le faire:
<div class="circular" v-bind:style="{ 'background-image': 'url(' + image + ')' }"></div>
En d'autres termes, la valeur pour v-bind:style
est juste un objet Javascript simple et suit les mêmes règles.
MISE À JOUR: Une autre remarque sur les raisons pour lesquelles vous pourriez avoir du mal à faire fonctionner cela.
Vous devez vous assurer que votre image
valeur est entre guillemets afin que la chaîne résultante de fin soit:
url('some/url/path/to/image.jpeg')
Sinon, si l'URL de votre image contient des caractères spéciaux (tels que des espaces ou des parenthèses), le navigateur risque de ne pas l'appliquer correctement. En Javascript, l'affectation ressemblerait à:
this.image = "'some/url/path/to/image.jpeg'"
ou
this.image = "'" + myUrl + "'"
Techniquement, cela pourrait être fait dans le modèle, mais l'échappement requis pour le garder valide HTML n'en vaut pas la peine.
Plus d'infos ici: Est-ce vraiment nécessaire de citer la valeur de url ()?
backgroundImage
) pas kebab case (background-image
) même si la documentation dit que cela peut l'être non plus.backgroundImage: image
placebackgroundImage: 'url('+image+')'
. Je suis tellement accro à la syntaxe vue que j'ai oublié leurl()
.v-bind:style="{ 'background-image': url(image) }"
, mais en dehors d'un composant (juste sur une page normale), il semblait nécessiter de mettre l'URL entre guillemets. Est-ce que quelqu'un sait pourquoi cela pourrait être?<div :style="{'background-image': 'url(' + require('./assets/media/img.jpg') + ')'}"></div>
la source
Une autre solution:
<template> <div :style="cssProps"></div> </template> <script> export default { data() { return { cssProps: { backgroundImage: `url(${require('@/assets/path/to/your/img.jpg')})` } } } } </script>
Qu'est-ce qui rend cette solution plus pratique? Premièrement, c'est plus propre. Et puis, si vous utilisez Vue CLI (je suppose que vous le faites), vous pouvez le charger avec webpack.
Remarque: n'oubliez pas que
require()
c'est toujours relatif au chemin du fichier actuel.la source
<div :style="{ backgroundImage: `url(${post.image})` }">
il y a plusieurs façons mais j'ai trouvé la chaîne de modèle facile et simple
la source
La liaison du style d'image d'arrière-plan à l'aide d'une valeur dynamique de la boucle v-for pourrait être effectuée comme suit.
<div v-for="i in items" :key="n" :style="{backgroundImage: 'url('+require('./assets/cars/'+i.src+'.jpg')+')'}"> </div>
la source
Pour un seul composant répété, cette technique fonctionne pour moi
<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+')' } }, }
la source
J'ai essayé la réponse @david , et cela n'a pas résolu mon problème. après beaucoup de tracas, j'ai créé une méthode et renvoyé l'image avec une chaîne de style.
Code HTML
<div v-for="slide in loadSliderImages" :key="slide.id"> <div v-else :style="bannerBgImage(slide.banner)"></div> </div>
Méthode
bannerBgImage(image){ return 'background-image: url("' + image + '")'; },
la source
J'ai rencontré un problème où les images d'arrière-plan avec des espaces dans le nom de fichier entraînaient la non-application du style. Pour corriger cela, je devais m'assurer que le chemin de la chaîne était encapsulé entre guillemets simples.
Notez le \ 'échappé dans mon exemple ci-dessous.
<div :style="{ height: '100px', backgroundColor: '#323232', backgroundImage: 'url(\'' + event.image + '\')', backgroundPosition: 'center center', backgroundSize: 'cover' }"> </div>
la source
La réponse acceptée ne semblait pas résoudre le problème pour moi, mais cela a fait
Assurez-vous que vos déclarations backgroundImage sont enveloppées dans une URL (et des guillemets pour que le style fonctionne correctement, quel que soit le nom du fichier.
Style ES2015:
<div :style="{ backgroundImage: `url('${image}')` }"></div>
Ou sans ES2015:
<div :style="{ backgroundImage: 'url(\'' + image + '\')' }"></div>
Source: vuejs / vue-loader issue # 646
la source