2 ๋ถ„ ์†Œ์š”

๐Ÿ“š 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

<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

<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 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">