728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ฌ์ฉ์๊ฐ <input> ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ๋ ฅํ๋ฉด ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์ฌ๋ฌ๊ฐ์ง UI ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์๋ค.
- ์ค๋์ ๊ทธ ์ค์ ์ํ ์๋ ๋ณ๊ฒฝ ๊ธฐ๋ฅ๊ณผ ์ด ๊ธ์ก ๊ณ์ฐ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์๋ค.
๐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ๋ณด๋ฅผ data ๋ณด๊ดํจ์ ์ ์ฅํด๋ณด๊ธฐ
๐ค <input> ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ ์ฅํ๊ธฐ
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ๋ณด์ ๋ฐ๋ผ์ ํน์ ๋ถ๋ถ์ ์ค์๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ผ๋ฉด data ๋ณด๊ดํจ์ data ๋ก ์ ์ฅํด๋๊ณ ํ์ํ ๋ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํ๋ฉด ๋๋ค.
<template>
<input @input="months = $event.target.value">
<p>{{months}}๊ฐ์ ์ ํ: {{ rooms[clickedRoom].price * months }}์</p>
</template>
<script>
export default {
data(){
return {
months : 0
}
}
}
</script>
- ๋ฐ๋ผ์, ์ฌ์ฉ์๊ฐ <input> ์ ์ ๋ ฅํ ๊ฐ์ data ๋ก ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
- @input ์ @click ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ์ธ๋ฐ, ๋ค๋ง ์ฌ์ฉ์๊ฐ input ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ๋ ฅํ ๋ ๋์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ด๋ค.
- @input ๊ณผ ์ ์ฌํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก๋ @change ๊ฐ ์๋ค.
- $event ๋ Vue ๊ฐ ์ ๊ณตํ๋ ํน๋ณํ ๋ณ์์ธ๋ฐ event object ๋ฅผ ๋ปํ๋ฉฐ, JavaScript ์์ addEventListener('click', function(e){ }) ์ ๊ฐ์ด ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉํ๊ณ ๋ ํ๋๋ฐ ์ฌ๊ธฐ์์ e ์ ๋์ผํ ์ญํ ์ ํ๋ค.
- ๋ฐ๋ผ์, $event.target.value ๋ผ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด <input> ์ ์ ๋ ฅํ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ด์ , ์ฌ์ฉ์๊ฐ <input> ์ ์ ๋ ฅํ ๊ฐ์ด data ๋ณด๊ดํจ์ months ์ ์ ์ฅ์ด ๋๋ ๊ฒ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ <p></p>์ <input> ์ ์ ๋ ฅ๋ ์ซ์๋ฅผ months ์ ์ ์ฅํ ํ ๋ถ๋ฌ์์, months ์ ๊ฐ๊ฒฉ์ ๊ณฑํ์ฌ, ๊ฐ์ ์์ ๋ฐ๋ฅธ ์ด ๊ธ์ก์ ๊ณ์ฐํด์ฃผ๋๋ก ๊ธฐ๋ฅ์ ๋ง๋ค์๋ค.
๐ @input ๋์ v-model ์ฌ์ฉํ๊ธฐ
// @input ์ฌ์ฉ
<input @input="months = $event.target.value">
// v-model ์ฌ์ฉ
<input v-model="months">
- Vue ์๋ @input ๋์ ์ ์ฌ์ฉํ ์ ์๋ v-model ์ด๋ผ๋ ๋ฌธ๋ฒ์ด ์๋ค.
- v-model ์ v-model ์ด๋ผ๋ ์ฝ๋๊ฐ ์ ํ html ํ๊ทธ์ ์
๋ ฅ๋ ๊ฐ์ ๋ฐ์ดํ ์์ ๋ค์ด์๋ ์ด๋ฆ์ data ๋ณด๊ดํจ์ ์ ์ฅํด๋ฌ๋ผ๋ ์๋ฏธ์ด๋ค.
(์ฐธ๊ณ ๋ก, <input> ์ธ์ <textarea>,<select> ์๋ ์ ์ฉ ๊ฐ๋ฅํ๋ฉฐ, <input type="checkbox"> ์ ๊ฐ์ด ํ์ ์ ๋ณ๊ฒฝํด๋ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.) - ๋ฐ๋ผ์, ์ ๋ ์ฝ๋๋ ๋๊ฐ์ด ๋์ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ ์ฝ๋ ๋ชจ๋ <input> ์ ์ ๋ ฅ๋ ๊ฐ์ String ํ์ ์ ํด๋นํ๋ฏ๋ก, ์ซ์๊ฐ ์ ๋ ฅ๋์ด๋ ๋ฌธ์๋ก ์ ์ฅ์ด ๋๋ค.
- ๊ทธ๋์ ์ซ์๋ก ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด v-model ์ ๊ฒฝ์ฐ์๋ v-model.number="months" ์ ๊ฐ์ด directive ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ํ์ง๋ง ์ด ๊ฒฝ์ฐ ์ซ์๋ก ๋ณํ๋ง ํ์ฌ ์ ์ฅํด์ฃผ๋ ๊ฒ์ผ ๋ฟ ๋ฌธ์์ ์ ๋ ฅ์ ๋ง์์ฃผ๋ ๊ฒ์ ์๋๋ผ๋ ์ ์ ๊ธฐ์ตํด์ผ ํ๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] Vue ์์ UI ์ ๋๋ฉ์ด์ ํจ๊ณผ ์ฃผ๊ธฐ (0) | 2022.04.03 |
---|---|
[Vue.js] watcher ๋ก ๋ฐ์ดํฐ ๊ฐ์ํ๊ธฐ (0) | 2022.04.03 |
[Vue.js] Component ๋ง๋ค๊ธฐ (0) | 2022.04.02 |
[Vue.js] ๋ชจ๋ฌ์ฐฝ ๋ด์ ์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ (0) | 2022.04.01 |
[Vue.js] import / export ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๊ธฐ (0) | 2022.04.01 |