강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

유대상님의 프로필 이미지
유대상

작성한 질문수

Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념

부모컴포넌트에서 자식컴포넌트의 slot으로 이미지를 보낼때 질문있습니다.

해결된 질문

작성

·

239

1

Vue완벽가이드를 완강하고 프로젝트를 하나 만들고 있는 와중에 궁금증이 생겨서 질문 드립니다..

흐름은 이렇습니다. Vuex의 state에 저장되어 있는 이미지Url을 부모 컴포넌트에서 slot이 있는 자식 컴포넌트로 보내주려고 합니다.

이미지 Url이 src속성에 제대로 들어오는 것은 확인했습니다만 화면상에 이미지가 나타나지 않습니다 ㅠㅠ

여러가지 시도를 해보았지만 잘 되지 않습니당 ㅠ

첫번째 방법으로는  부모 컴포넌트에서 v-html 디렉티브를 이용해서 뿌려 주는 방법입니다. 아래 코드를 첨부하였습니다.

<!-- 부모 컴포넌트 -->

<display-items 
        v-for="product in products" 
        :key="product.name" 
      >
        <template #productInfo-photo>
          <div class="item-container__photo" v-html="product.imgElement"></div>
        </template>
 </display-items>

<!-- 
   product.imgElement =   '<img src="../assets/img/brands/img.png" />'
 -->

<!-- 자식 컴포넌트 -->

<template>
    <div>
        <slot name="productInfo-photo" />
    </div> 
</template>

두번째 방법은 프롭스를 내려주는 방식으로 이미지url을 내리는 방식으로 구현했습니다.

<!-- 부모컴포넌트  -->

<display-items 
        v-for="product in products" 
        :key="product.name" 
        :imgPath="product.photoUrl"
        />


<!-- 자식컴포넌트 -->
<template>
    <img :src="imgPath" />
</template>

<script>
export default {
    props:['imgPath'],
}
</script>

자세히 보니 이미지 url까지는 들어오지만 자식컴포넌트에서 적용한 CSS가 먹히지 않는 것 같은데 이유를 잘 모르겠습니다 ㅠ

제가 첨부한 코드에서는 class를 명시하지 않았지만, 첫번째 코드에서는 요소의 class를 imgElement에 포함시켰고, 두번째 코드에서는 자식 컴포넌트의 img태그에 작성하였습니다.

제가 어떤 부분을 놓치고 있는지와 다른 더 좋은 방법이 있는지 궁금합니다 !

답변 1

1

캡틴판교님의 프로필 이미지
캡틴판교
지식공유자

안녕하세요 홀랄쓰롤랄쓰님,

자식 컴포넌트에서 CSS 스타일이 적용되지 않는 것은 컴포넌트의 스타일 적용 범위(scoped 적용 유무)를 고려해서 다시 스타일 시트 작성하시면 될 것 같습니다. 그리고 이미지를 별도의 컴포넌트로 구분해서 개발하실 때 하실 수 있는 방법인 props, slot 모두 사용하신 것 같아서 딱히 더 말씀드릴 부분이 없네요.. 현재 구조에서 props와 slot의 차이점을 설명드리기에는 너무 설명이 길어질 것 같아 제가 강의에서 다룬 내용들을 다시 살펴보시라고 밖에 말씀 드릴수가 없을 것 같아요..! :)

유대상님의 프로필 이미지
유대상

작성한 질문수

질문하기