Vue.js_Form Input Bindings
๐ Vue.js
๐ Vue.js Form Input Bindings
Vue ํผ ์ ๋ ฅ ๋ฐ์ธ๋ฉ ( Form Input Bindings ) ์ด๋
-
v-model
directive๋ฅผ ์ฌ์ฉํ์ฌ ํผ input๊ณผ textarea element์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์์ฑํ ์ ์๋ค.- text์ textarea ํ๊ทธ๋ value ์์ฑ๊ณผ input ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฒดํฌ๋ฐ์ค๋ค๊ณผ ๋ผ๋์ค ๋ฒํผ ๋ค์ checked ์์ฑ๊ณผ change ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ค.
- Select ํ๊ทธ๋ value๋ฅผ prop์ผ๋ก , change๋ฅผ ์ด๋ฒคํธ๋ก ์ฌ์ฉํ๋ค.
form - text, textarea
- ๋ฌธ์์ด ( text )
<input v-model="msg" placeholder="์ฌ๊ธฐ๋ฅผ ์์ ํ์ธ์">
<p>๋ฉ์ธ์ง : </p>
- ์ฌ๋ฌ์ค์ ๊ฐ์ง ๋ฌธ์ฅ ( textarea )
- ํ
์คํธ ์์ญ์ ๋ณด๊ฐ
(<textarea></textarea>)
์ ์๋ํ์ง ์ใน๋๋ค.ย ยปv-model
๋ฅผ ์ฌ์ฉ
- ํ
์คํธ ์์ญ์ ๋ณด๊ฐ
<span>์ฌ๋ฌ ์ค์ ๊ฐ์ง๋ ๋ฉ์ธ์ง:</span>
<p style="white-space: pre-line"></p>
<br>
<textarea v-model="msg" placeholder="์ฌ๋ฌ์ค์ ์
๋ ฅํด๋ณด์ธ์"></textarea>
- ์ค์ต
<div id="app">
<div>
์์ด๋ : <input v-model="id" placeholder="์์ด๋๋ฅผ ์
๋ ฅํ์ธ์">
<!-- .lazy ์์์ด๋ฅผ ์ถ๊ฐํ์ฌ change ์ด๋ฒคํธ ์ดํ์ ๋๊ธฐํ ํ ์ ์์ต๋๋ค. -->
<!-- lazy๋ฅผ ์ฌ์ฉ์ํ๋ฉด ํ๊ธ์์ฉ ์์ฑํ๋ ์๊ฐ ๋ฐ๋ก ๋ฐ์์ด ๋์ง๋ง, lazy๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค ์์ฑํ๊ณ ๋ฐ์์ ํ ์ ์๋ค -->
<!-- ์์ด๋ : <input v-model.lazy="id" placeholder="์์ด๋๋ฅผ ์
๋ ฅํ์ธ์"> -->
</div>
<div>
๋ฉ์ธ์ง : <textarea v-model="msg" placeholder="๋ด์ฉ์ ์
๋ ฅํ์ธ์"></textarea>
</div>
<p> ๋์๊ฒ ๋ณด๋ด๋ ๋ฉ์ธ์ง : </p>
</div>
<script>
new Vue({
el: "#app",
data: {
id: '',
msg: '',
},
});
</script>
- ์คํ ๊ฒฐ๊ณผ
form - checkbox
- ํ๋์ ์ฒดํฌ๋ฐ์ค๋ ๋จ์ผ boolean ๊ฐ์ ๊ฐ๋๋ค.
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox"></lable>
- ๋จ์ผ ์ฒดํฌ๋ฐ์ค ์ค์ต
<div id="app">
<p>
์ด๋ฉ์ผ ์์
<input type="checkbox" id="emailYN" v-model="email">
<label for="emailYN"></label>
</p>
<p>
SMS ์์
<input type="checkbox" id="smsYN" v-model="sms" true-value="Y" false-value="N"/>
<label for="smsYN"></label>
</p>
</div>
<script>
new Vue({
el: '#app',
data: {
email: false,
sms: 'Y',
}
});
</script>
- ์คํ ๊ฒฐ๊ณผ
- ์ฌ๋ฌ ๊ฐ์ ์ฒดํฌ๋ฐ์ค๋ ๊ฐ์ ๋ฐฐ์ด์ ๋ฐ์ธ๋ฉ ํ ์ ์๋ค.
-
๋ฐฐ์ด์ ๊ฐ๊ณผ checkbox์ value ์์ฑ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ฒดํฌ ์ฒ๋ฆฌ๋จ
- ์ฌ๋ฌ๊ฐ ์ฒดํฌ๋ฐ์ค ์ค์ต
<div id="app">
<div>๋น์ ์ด ๊ฐ๊ณ ์ถ์ ์ง์ญ์ ์ ํํ์ธ์ !!</div>
<input type="checkbox" id="seoul" value="์์ธ" v-model="checkedAreas">
<label for="seoul">์์ธ</label>
<input type="checkbox" id="daegu" value="๋๊ตฌ" v-model="checkedAreas">
<label for="daegu">๋๊ตฌ</label>
<input type="checkbox" id="busan" value="๋ถ์ฐ" v-model="checkedAreas">
<label for="busan">๋ถ์ฐ</label>
<input type="checkbox" id="daejeon" value="๋์ " v-model="checkedAreas">
<label for="daejeon">๋์ </label>
<br>
<span>์ฒดํฌํ ์ด๋ฆ : </span>
</div>
<script>
new Vue({
el: '#app',
data: {
checkedAreas: [],
}
});
</script>
- ์คํ ๊ฒฐ๊ณผ
form - radio
- radio์ ๊ฒฝ์ฐ ์ ํ๋ ํญ๋ชฉ์ value ์์ฑ์ ๊ฐ์ ๊ด๋ฆฌ
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>์ ํ: </span>
- ์ค์ต
<div id="app">
<div>์์
์ ๋ฃ๋ ์ง์ญ์ ์ ํํ์์ค </div>
<div>
<input type="radio" id="daegu" value="๋๊ตฌ" v-model="ckArea">
<label for="daegu">๋๊ตฌ</label>
<input type="radio" id="seoul" value="์์ธ" v-model="ckArea">
<label for="seoul">์์ธ</label>
<input type="radio" id="gumi" value="๊ตฌ๋ฏธ" v-model="ckArea">
<label for="gumi">๊ตฌ๋ฏธ</label>
<input type="radio" id="daejeon" value="๋์ " v-model="ckArea">
<label for="daejeon">๋์ </label>
</div>
<span>๋ด๊ฐ ์ ํํ ์ง์ญ : </span>
</div>
<script>
new Vue({
el: '#app',
data: {
ckArea: '๋๊ตฌ',
}
});
</script>
- ์คํ ๊ฒฐ๊ณผ
form - select
- select box์ผ ๊ฒฝ์ฐ ์ ํ๋ ํญ๋ชฉ์ value ์์ฑ์ ๊ฐ์ ๊ด๋ฆฌ
-
v-model
ํํ์์ ์ด๊ธฐ ๊ฐ์ด ์ด๋ค ์ต์ ์๋ ์์ผ๋ฉด,<select>
element๋ โ์ ํ์์โ ์ํ๋ก ๋ ๋๋ง๋๋ค.
<select v-model="selectedHobby">
<option disabled value="">์ ํ</option>
<option value="๊ณต๋ถ">๊ณต๋ถ</option>
<option value="๋
ธ๋">๋
ธ๋</option>
<option value="์ถค">์ถค</option>
</select>
<span>์ ํํจ : </span>
- ์ค์ต
<div id="app">
<div>์์
์ ๋ฃ๋ ์ง์ญ์ ์ ํํ์์ค </div>
<select v-model="selectedArea">
<option value="">์ ํํ์ธ์</option>
<option value="daegu">๋๊ตฌ</option>
<option value="gumi">๊ตฌ๋ฏธ</option>
<option value="seoul">์์ธ</option>
<option value="daejeon">๋์ </option>
</select>
<span>๋ด๊ฐ ์ ํํ ์ง์ญ : </span>
</div>
<script>
new Vue({
el: '#app',
data: {
selectedArea: '',
}
});
</script>
- ์คํ ๊ฒฐ๊ณผ
form - ์์์ด ( Modifiers )
-
.lazy
- .lazy ์์์ด๋ฅผ ์ถ๊ฐํ์ฌ change ์ด๋ฒคํธ ์ดํ์ ๋๊ธฐํ ํ ์ ์์ต๋๋ค.
<input v-model.lazy="msg">
-
.number
- ์ฌ์ฉ์ ์ ๋ ฅ์ด ์๋์ผ๋ก ์ซ์๋ก ํ ๋ณํ ๋๊ธฐ๋ฅผ ์ํ๋ฉด, v-model์ด ๊ด๋ฆฌํ๋ input์ number ์์์ด๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
<input v-model.number="age" type="number">
-
.trim
- v-model์ด ๊ด๋ฆฌํ๋ input์ ์๋์ผ๋ก trim ํ๊ธฐ ์ํ๋ฉด, trim ์์ ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
<input v-model.trim="msg">