์ถ์ ์ฐํด ์ดํ์ ํน์ฌ๊ณ ๋จ์ ๊ธฐ๊ฐ ๋์์ scss๊ณต๋ถ + ์ ํ๋ธ ๋ฉ์ธ ๋ ์ด์์ ํด๋ก
๊ณผ์ ๋ฅผ ์งํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฒ์ฃผ๋ถํฐ๋ ๋๋์ด Vue ํ์ต ์๊ฐ!!! ์ฒ์์ผ๋ก ํ๋ ์์ํฌ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ด๋ผ ๊ธฐ๋๊ฐ ๋๋ค.
์ด์ฌํ ๋ฐฐ์์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณผ ์์ ์ด๋ค.
- ํด๋์ค์ ์คํ์ผ ๋ฐ์ธ๋ฉ
- ์กฐ๊ฑด๋ถ ๋ ๋๋ง
- ๋ฆฌ์คํฌ ๋ ๋๋ง
- ์ด๋ฒคํธ ํธ๋ค๋ง
- ํผ ์ ๋ ฅ ๋ฐ์ธ๋ฉ
์ค๋์ Vue.js์ ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ ํผ ์ ๋ ฅ ๋ฐ์ธ๋ฉ์ ๋ํด ์ ๋ฆฌํด๋ณผ ์์ ์ด๋ค.
ํ๋ฉด์ ๋ณด์ด๋ ๋ฐ์ดํฐ์ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์น
์ํค๋ ๊ธฐ๋ฒv-bind ๋๋ ํฐ๋ธ
๋ฅผ ์ฌ์ฉํ์ฌ html ์ฝ๋ ๋ด๋ก ๋ฐ์ธ๋ฉํ์ฌ ํ๋ฉด์ ๋ ๋๋งํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ํ์ธํ ์ ์๋ค.Vue ์ธ์คํด์ค -> Template์ ๊ฐ์ด ํ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ์ ์ ๊ทผ
ํ๋ ๋ฐฉ์์ด๋ค. <body>
<div id="app">
<input type="text" :value="msg" />
<h1>{{msg}}</h1>
</div>
<script>
const App = {
data() {
return {
msg: 'hello Vue!',
};
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
</body>
์ ์ฝ๋์ ๊ฐ์ ์ํฉ์์ ๋ฐ์ดํฐ๋ ํ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅด๊ณ ์๊ธฐ ๋๋ฌธ์ input ํ๊ทธ์ ๊ฐ์ ๋ณ๊ฒฝํด๋ ํ๋ฉด์๋ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์ผ์ด๋์ง ์๋๋ค
Vue ์ธ์คํด์ค -> Template, Template -> Vue ์ธ์คํด์ค ์๋ฐฉํฅ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ
ํ ์ ์๋๋ก ํ๋ ๊ฒ Vue์์๋ ์ด๋ฒคํธ์ v-model ๋๋ ํฐ๋ธ๋ฅผ ํตํด ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅํ๋ค
์ด๋ฌํ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํผ ์ ๋ ฅ ๋ฐ์ธ๋ฉ์์ ํ์ธํด ๋ณผ ์ ์๋ค.
input, textarea, select ๋ฑ ๋ค์ํ ์์์์ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
1. input ์ด๋ฒคํธ ํ์ฉ
<body>
<div id="app">
<input type="text" :value="msg" @input="msg = $event.target.value" />
<h1>{{msg}}</h1>
</div>
<script>
const App = {
data() {
return {
msg: 'hello Vue!',
};
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
</body>
์์ ๊ฐ์ด input ์ด๋ฒคํธ
๋ฅผ ํ์ฉํด $event.target์ ์ง์ ์ ๊ทผ
ํ์ฌ msg๋ฅผ ๋ณ๊ฒฝํด ์ค ์ ์๋ค.
์ฃผ์ํ ์ ์, ํ๊ธ์ ๊ฒฝ์ฐ v-model ๋๋ ํฐ๋ธ ์ฌ์ฉ ์ ์ค์๊ฐ ๋ฐ์์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ํ๊ธ ์ ๋ ฅ ์์๋ input ์ด๋ฒคํธ๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ข๋ค
2. v-model ๋๋ ํฐ๋ธ ํ์ฉ
input ์์ ์ ์ฉ ์์
<body>
<div id="app">
<input type="text" v-model="msg" />
<h1>{{msg}}</h1>
</div>
<script>
const App = {
data() {
return {
msg: 'hello Vue!',
};
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
</body>
<body>
<div id="app">
<input v-model="picked" type="radio" value="daseul" />
<input v-model="picked" type="radio" value="leon" />
<input v-model="picked" type="radio" value="lia" />
</div>
<script>
const App = {
data() {
return {
picked: '',
};
},
watch: {
picked(newValue) {
console.log(newValue);
},
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
</body>
select ์์ ์ ์ฉ ์์
<body>
<div id="app">
<select v-model="selected">
<option value="">ํ๋๋ฅผ ์ ํํ์ธ์!</option>
<option v-for="fruit in fruits" :key="fruit.value" :value="fruit.value">
{{fruit.text}}
</option>
</select>
</div>
<script>
const App = {
data() {
return {
selected: '',
fruits: [
{ text: '์ฌ๊ณผ', value: 'apple' },
{ text: '๋ฐ๋๋', value: 'banana' },
{ text: '์ฒด๋ฆฌ', value: 'cherry' },
],
};
},
watch: {
selected(newValue) {
console.log(newValue);
},
},
};
const vm = Vue.createApp(App).mount('#app');
</script>
</body>
๋ฐ๋๋ผ JS๋ก ์ปดํฌ๋ํธ, ์ด๋ฒคํธ ํธ๋ค๋ง, ์ํ ๊ด๋ฆฌ ๋ฑ์ ๋ฐฐ์ฐ๊ณ ๋๋ Vue๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ด ํจ์ฌ ์์ํ ๊ฒ ๊ฐ๋ค.
๋ฐฐ์ ๋ ๋ด์ฉ๋ค์ ํ๋ํ๋ ๋ณต์ตํ๋ฉฐ Vue์ ์ ์ ์ฉํ ์ ์๋๋ก ๋
ธ๋ ฅํด์ผ๊ฒ ๋ค.
์ด๋ฒ์ฃผ๋ ํ๋ด๋ณด์..!!!!!