728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ด๋ฒ์๋ ํด๋ฆญํ ์ํ์ ์์ธ ํ์ด์ง๋ฅผ ๋ชจ๋ฌ์ฐฝ ๋ด์ ๋ณด์ฌ์ค ์ ์๋๋ก ๋ง๋ค์ด๋ณด์๋ค.
- ์ง์ง ๋ถ๋์ฐ ์ดํ์ฒ๋ผ ์ํ๋ง๋ค ์ฌ๋ฌ๊ฐ์ ์ฌ์ง์ ์ธ๋ค์ผ๋ก ๋ณด์ฌ์ฃผ๊ณ ํด๋ฆญํ๋ฉด ํฌ๊ฒ ๋ณผ ์ ์๋๋ก ๊ตฌํํด๋ณด๋ฉด ๋ ์ฌ๋ฏธ์์์ ๊ฒ ๊ฐ๋ค. ์ด๊ฑด ๋ณ๋ก ์ด๋ ต์ง ์๊ฒ ๊ฐ๋ฅํ ๋ฏ!
๐ ๋ชจ๋ฌ์ฐฝ ๋ด์ ์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ
๐ค ํ๋์ฝ๋ฉ์ผ๋ก ๋ชจ๋ฌ์ฐฝ ๋ด์ ์ฒซ ๋ฒ์งธ ์ํ์ ์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ
- ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ ์ก๊ธฐ ์ด๋ ต๋ค๋ฉด ๋จผ์ ํ๋๋ง ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํด๋ณด๋ฉด์ ์ด๋ค ๋ถ๋ถ์ ์์ ํ๋ฉด ๋ค๋ฅธ ๋ฐ์ดํฐ๋ ๋๊ฐ์ด ์ ์ฉ์ ํ ์ ์์์ง ๊ฐ์ ์ก๋ ๊ฒ์ด ์ค์ํ๋ค.
{
id : 0,
title: "Sinrim station 30 meters away",
image: "https://codingapple1.github.io/vue/room0.jpg",
content: "18๋
์ ์ถ๊ณต์ฌํ ๋จํฅ ์๋ฃธ โ๏ธ, ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ ๊ณต",
price: 340000
}
<div class="black-bg" v-if="openModal == true" @click="close($event)" >
<div class="white-bg">
<img :src="rooms[0].image" class="detail-room-image">
<h4>{{ rooms[0].title }}</h4>
<p>{{ rooms[0].content }}</p>
<p>{{ rooms[0].price }}์</p>
<button class="close">๋ซ๊ธฐ</button>
</div>
</div>
- ๋ชจ๋ฌ์ฐฝ ๋ด ์ฒซ๋ฒ์งธ ์ํ์ ์์ธ ํ์ด์ง ๋ด์ฉ์ผ๋ก ๋ค์ด๊ฐ ์ ์๋ ๋ฐ์ดํฐ๋ค์ ์์ ๊ฐ๋ค.
- ๋๋ id ๋ฅผ ์ ์ธํ๊ณ title, image, content, price ๋ชจ๋ ์์ธ ํ์ด์ง์ ๋ด์์ฃผ์๋ค.
๐ค ๋ชจ๋ฌ์ฐฝ ๋ด์ ํด๋ฆญํ ์ํ์ ์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ
- ์ด์ ์์ html ์ฝ๋์์ 0 ์ด๋ผ๊ณ ์์ฑํ ๋ถ๋ถ๋ง ํด๋ฆญํ ์ํ์ ์ธ๋ฑ์ค ํน์ ํด๋ฆญํ ์ํ์ id ๋ก ์์ ํด์ฃผ๋ฉด ๋๋ค.
- ์๋ฅผ ๋ค์ด, 0๋ฒ ์ธ๋ฑ์ค์ ์ํ์ ํด๋ฆญํ๋ฉด 0๋ฒ ์ํ์ ์์ธ ํ์ด์ง, 1๋ฒ ์ธ๋ฑ์ค์ ์ํ์ ํด๋ฆญํ๋ฉด 1๋ฒ ์ํ์ ์์ธ ํ์ด์ง.. ์ด๋ฐ ์์ผ๋ก ๋ง์ด๋ค.
- React ์์๋ state ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ง๋ง, Vue ์ ๊ฒฝ์ฐ์๋ data ๋ณด๊ดํจ์ ํด๋ฆญํ ์ํ์ ์ธ๋ฑ์ค ํน์ ํด๋ฆญํ ์ํ์ id ๋ฅผ ๋ณด๊ดํด๋์๋ค๊ฐ ๋ค๋ฅธ ์ํ์ ํด๋ฆญํ ๋๋ง๋ค ๊ทธ์ ๋ง๊ฒ ๋ณ๊ฒฝ๋๋๋ก ํด์ฃผ๋ฉด ๋๋ค.
data(){
return {
clickedRoom : 0,
}
}
- ๊ทธ๋์ ์์ ๊ฐ์ด data ๋ณด๊ดํจ์ clickedRoom ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ํด๋ฆญํ ์ํ์ ์ธ๋ฑ์ค ํน์ id ๋ฅผ ๋ณด๊ดํด์ค ์ ์๋๋ก ํด์ฃผ๊ณ , ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํด์ฃผ์๋ค.
<div class="card" v-for="(room, i) in rooms" :key="i">
<img :src="room.image" class="room-image">
<h4 class="room-name" @click="openModal = true; clickedRoom = i">{{ room.title }}</h4>
<p>{{ room.price }}์</p>
<span>์ ๊ณ ์: {{ report[room.id] }}</span> <button class="report" @click="increase(room.id)">ํ์๋งค๋ฌผ์ ๊ณ </button>
</div>
- ๊ทธ๋ฆฌ๊ณ ์ํ์ ์์ธ ํ์ด์ง๋ ์ํ๋ช ์ ํด๋ฆญํด์ผ ์ด๋ฆฌ๊ธฐ ๋๋ฌธ์ room-name ์ด๋ผ๋ class ๋ฅผ ๊ฐ์ง h4 ํ๊ทธ์ @click ์์ฑ์ clickedRoom = i ๋ผ๊ณ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
- card ๋ผ๋ class ๋ฅผ ๊ฐ์ง div ํ๊ทธ๋ v-for ๋ฌธ๋ฒ์ ์ํด ๋ฐ๋ณต๋๋ฉด์ rooms ๋ฐ์ดํฐ๊ฐ ๋ฐ์ธ๋ฉ๋์ด ๋ ์ด์์์ด ์์ฑ๋๋๋ฐ, ์ด ๋ ๊ฐ ์์๋ฅผ ๊ตฌ๋ณํ ์ ์๊ฒ ๋ถ์ฌ๋ i ๋ฅผ ํ์ฉํ ๊ฒ์ด๋ค.
๐ v-if / v-else ๋ฌธ๋ฒ ์์๋ณด๊ธฐ
<div v-if="1 == 2">
์๋
ํ์ธ์
</div>
<div v-else-if="1 == 3">
์๋
ํ์ธ์2
</div>
<div v-else>
์๋
ํ์ธ์3
</div>
- JavaScript ๋ฅผ ๊ณต๋ถํ๋ฉด if ๋ฌธ, if-else ๋ฌธ ๋ฑ๊ณผ ๊ฐ์ด if ๋ฌธ์ ๋ํด ๊ณต๋ถํ๊ฒ ๋๋ค.
- Vue ์์๋ ์ด์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ v-if ๋ฌธ, v-else ๋ฌธ ๋ฑ์ด ์กด์ฌํ๋ค.
- ์ด์ ์ ๋ฐฐ์ด v-if="์กฐ๊ฑด์" ์ด๋ผ๋ ๋ฌธ๋ฒ์ ์กฐ๊ฑด์์ด ์ฐธ์ผ ๊ฒฝ์ฐ์๋ง ํด๋น ๋ฌธ๋ฒ์ด ๋ค์ด์๋ html ํ๊ทธ๋ฅผ ๋ณด์ฌ์ค ์ ์์๋ค.
- ๊ทผ๋ฐ v-else ๋ผ๋ ๋ฌธ๋ฒ๋ ์กด์ฌํ๋๋ฐ, ์ด๋ v-if ๋ฌธ์ ์ ์ ์กฐ๊ฑด์์ด ์ฐธ์ด ์๋ ๊ฒฝ์ฐ์ v-else ๋ฌธ์ด ๋ค์ด์๋ html ํ๊ทธ๋ฅผ ๋ณด์ฌ์ค๋ค.
- ๋ฌผ๋ก , ์กฐ๊ฑด๋ฌธ์ด 3๊ฐ ์ด์์ด ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ v-else-if ๋ฌธ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํ์์ ๋ฐ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] ์ฌ์ฉ์์ input ๋ฐ์์ค๊ธฐ (0) | 2022.04.03 |
---|---|
[Vue.js] Component ๋ง๋ค๊ธฐ (0) | 2022.04.02 |
[Vue.js] import / export ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๊ธฐ (0) | 2022.04.01 |
[Vue.js] v-if ์ ๋ชจ๋ฌ์ฐฝ ๋ง๋ค๊ธฐ (0) | 2022.04.01 |
[Vue.js] Vue ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก click ๊ฐ์งํ๊ธฐ (0) | 2022.04.01 |