[javascript] Vue.js 데이터 바인딩 스타일 backgroundImage가 작동하지 않음

요소에서 이미지의 src를 바인딩하려고하는데 작동하지 않는 것 같습니다. “Invalid expression. Generated function body : {backgroundImage : {url (image)}”가 표시됩니다.

문서는 ‘케밥의 경우’또는 ‘낙타 경우’를 사용하도록했다.

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

여기 바이올린이 있습니다 : https://jsfiddle.net/0dw9923f/2/



답변

문제는의 값 backgroundImage이 다음과 같은 문자열이어야한다는 것입니다.

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

다음은 작동하는 간단한 바이올린입니다. https://jsfiddle.net/89af0se9/1/

Re : kebab-case에 대한 아래의 코멘트, 이것이 당신이 그것을 할 수있는 방법입니다 :

<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 ()의 값을 인용하는 것이 정말로 필요합니까?


답변

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


답변

또 다른 해결책 :

<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()항상 현재 파일의 경로에 상대적 임을 잊지 마십시오 .


답변

<div :style="{ backgroundImage: `url(${post.image})` }">

여러 가지 방법이 있지만 템플릿 문자열을 쉽고 간단하게 찾았습니다.


답변

v-for 루프 의 동적 값을 사용하여 배경 이미지 스타일을 바인딩하는 방법은 다음과 같습니다.

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


답변

단일 반복 구성 요소의 경우이 기술이 나를 위해 작동합니다.

<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+')'
                }
            },
}


답변

@david 답변을 시도했지만 문제가 해결되지 않았습니다. 많은 번거 로움 끝에 메서드를 만들고 스타일 문자열로 이미지를 반환합니다.

HTML 코드

<div v-for="slide in loadSliderImages" :key="slide.id">
    <div v-else :style="bannerBgImage(slide.banner)"></div>
</div>

방법

bannerBgImage(image){
    return 'background-image: url("' + image + '")';
},