250x250
Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

진스

img 태그의 src 바인딩 , background 하는 방법 본문

Vue

img 태그의 src 바인딩 , background 하는 방법

입방정 2021. 7. 2. 14:46
728x90

이런식도 가능

<div :style="{ backgroundImage: 'url(' + image + ')' }"></div>

or

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

or

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

 

출처

Vue.js에선 element의 속성을 동적으로 처리할 때 v-bind라는 Directive를 사용한다.

(Vue.js의 Directive는 다음에 정리)

일반적인 HTML 태그들의 속성을 바인딩할 경우가 생기는데,

그 대표적인 예로 img 태그의 src 속성이다.

(src는 불러올 이미지의 경로를 지정해준다.)

특히 여러 이미지를 for문으로 한 번에 불러올 때 src를 바인딩 해줘야 한다.

다음과 같이 말이다.

<templates>
  <div v-for="person in people":key="person.id">
    <img :src="person.profileUrl" />
    <!-- person이라는 각 객체의 profileUrl 키에 접근, 그에 해당하는 value를 동적 바인딩 해준다. -->
  </div>
</tempates>

<script>
export default {
  data() {
    return {
      people: [
        {
          // ... 생략
          profileUrl: "../../assets/images/person1.jpg"
        },
        {
          // ... 생략
          profileUrl: "../../assets/images/person2.jpg"
        },
        {
          // ... 생략
          profileUrl: "../../assets/images/person3.jpg"
        },
        {
          // ... 생략
          profileUrl: "../../assets/images/person4.jpg"
        }
      ],
    }
  }
}
</script>

위와 같이 :src 또는 v-bind:src를 써서 binding 해준다.

(콜론은 v-bind: 의 sugar syntax라고 생각하면 된다. 즉, 축약어)

하지만 위와 같이 하면 이미지가 불러와지지 않는다.

왜 나오지 않는 것일까?

그 이유는 각 객체의 profileUrl에 저장이 되어 있는 것은 단순 String 값이기 때문이다.

이를 해결하기 위해서는 해당 경로를 import한다는 의미로

require를 사용해야 한다. 다음 코드와 같이 쓰면 해결이 된다.

<script>
export default {
  data() {
    return {
      people: [
        {
          // ... 생략
          profileUrl: require("../../assets/images/person1.jpg")
        },
        {
          // ... 생략
          profileUrl: require("../../assets/images/person2.jpg")
        },
        {
          // ... 생략
          profileUrl: require("../../assets/images/person3.jpg")
        },
        {
          // ... 생략
          profileUrl: require("../../assets/images/person4.jpg")
        }
      ],
    }
  }
}
</script>

이렇게 하면 이미지 4개가 동적으로 불려와서 화면에 보여진다.

 

728x90

'Vue' 카테고리의 다른 글

안드로이드 키패드에서 자동으로 다음 input을 찾아 focus 이동 하기  (0) 2021.08.11
vue 룰렛  (0) 2021.07.02
vue에서 (camelcase)카멜케이스 켜는 방법  (0) 2021.06.17
Vue 탭 UI  (0) 2021.06.16
vue-awesome-swiper의 옵션  (0) 2021.06.16
Comments