vue3 表單輸入綁定


一、基礎

 v-model 指令在表單 <input><textarea> 及 <select> 元素上創建雙向數據綁定

1.文本

    <div id="vm">
        <input v-model="message" placeholder="edit me" />
        <p>Message is: {{ message }}</p>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    message:null
                }
            }
        }).mount('#vm')
    </script>

2.多行文本

        <p style="white-space: pre-line;">{{ message }}</p>
        <br>
        <textarea v-model="message" ></textarea>

文本區域插值不起作用,應該使用 v-model 來代替

3.復選框

    <div id="vm">
        <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
        <label for="jack">Jack</label>
        <input type="checkbox" id="john" value="John" v-model="checkedNames">
        <label for="john">John</label>
        <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
        <label for="mike">Mike</label>
        <br>
        <span>Checked names: {{ checkedNames }}</span>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    checkedNames: []
                }
            }
        }).mount('#vm')
    </script>

4.單選按鈕

    <div id="vm">
        <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>Picked: {{ picked }}</span>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    picked: ''
                }
            }
        }).mount('#vm')
    </script>

5.選擇框

(1)簡單

   <div id="vm">
        <select v-model="selected">
            <option disabled value="">請選擇</option>
            <option>A</option>
            <option>B</option>
            <option>C</option>
        </select>
        <span>Selected: {{ selected }}</span>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    selected: ''
                }
            }
        }).mount('#vm')
    </script>

(2)多選

    <div id="vm">
        <select v-model="selected" multiple style="width: 50px;">
            <option>A</option>
            <option>B</option>
            <option>C</option>
        </select>
        <br>
        <span>Selected: {{ selected }}</span>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    selected: []
                }
            }
        }).mount('#vm')
    </script>

(3)v-for動態渲染

    <div id="vm">
        <select v-model="selected">
            <option v-for="option in options" v-bind:value="option.value">
                {{ option.text }}
            </option>
        </select>
        <span>Selected: {{ selected }}</span>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    selected: 'A',
                    options: [
                        { text: 'One', value: 'A' },
                        { text: 'Two', value: 'B' },
                        { text: 'Three', value: 'C' }
                    ]
                }
            }
        }).mount('#vm')
    </script>

 

二、值綁定

1.復選框

    <div id="vm">
        <input type="checkbox" v-model="toggle" true-value="ok" false-value="no" />
        {{toggle}}
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    toggle:null
                }
            }
        }).mount('#vm')
    </script>

 

2.單選框

    <div id="vm">
        <input type="radio" id="one" v-model="pick" v-bind:value="a" />
        <br>
        <input type="radio" id="two" v-model="pick" v-bind:value="b" />
        <br>
        {{pick}}
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    a: 'aaa',
                    b: 'bbb',
                    pick: null
                }
            }
        }).mount('#vm')
    </script>

 

 

 3.下拉框

    <div id="vm">
        <select v-model="selected">
            <!-- 內聯對象字面量 -->
            <option :value="{ number: 123 }">123</option>
            <option :value="{ number: 456 }">456</option>
        </select>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return{
                    selected:null
                }
            }
        }).mount('#vm')
    </script>

 

 

 

三、修飾符

 1.number

在 type="number" 時,HTML 輸入元素的值也總會返回字符串

    <div id="vm">
        <input v-model="age" type="number" >
        {{c}}
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    age:null
                }
            },
            computed:{
                c(){
                    return typeof this.age
                }
            }
        }).mount('#vm')
    </script>

 如果想自動將用戶的輸入值轉為數值類型,可以給 v-model 添加 number 修飾符

    <div id="vm">
        <input v-model.number="age" type="number">
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    age: null
                }
            },
            watch: {
                age(newvalue) {
                   console.log(typeof newvalue)
                }
            }
        }).mount('#vm')
    </script>

2.trim

過濾輸入空格

  <div id="vm">
        <input v-model.trim="msg">
        <p>{{msg}}</p>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    msg: ''
                }
            }
        }).mount('#vm')
    </script>

3.lazy

當失去焦點時更新

    <div id="vm">
        <input type="text" v-model.lazy="content">
        <p>{{content}}</p>
    </div>
    <script>
        const v = Vue.createApp({
            data() {
                return {
                    content: ''
                }
            }
        }).mount('#vm')
    </script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM