表單與 v-model

VUE 提供了 v--model 指令, 用于在 表單類 的元素上雙向綁定事件。

一、v--model 基本用法

1. input 和 textarea

v--model 可以用于 input 框,以及 textarea 多行文本框等。

<div id="app">
    <input type="text" v-model="value">
    {{value}}
    <textarea name="" id="" cols="30" rows="10" v-model="message">我是初始化值</textarea>
    {{message}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            value: '',
            message: ''
        }
    })
</script>

注意: 所顯示的值只依賴于所綁定的數(shù)據(jù),不再關(guān)心初始化時的插入的 value 值。

2. 單選按鈕
  • 單個單選按鈕,直接用 v--bind 綁定一個布爾值,用 v--model 則不可以。
<div id="app">
    <input type="radio" v-bind:checked="oneradio">
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            oneradio: true,
        }
    })
</script>
  • 若多個單選框組合使用(用相同 name 實現(xiàn)多個單選框互斥),就需要 v--model 來配合 value 使用,綁定選中的單選框的 value 值,此處所綁定的初始值可以隨意設(shè)置。
<div id="app">
    <input type="radio" name="checks" value="小貓" v-model="checkname"> 小貓
    <input type="radio" name="checks" value="小狗" v-model="checkname"> 小狗
    <input type="radio" name="checks" value="小刺猬" v-model="checkname"> 小刺猬
    現(xiàn)在選中的是:{{checkname}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            checkname: '小貓' // 初始值
        }
    })
</script>
3. 復(fù)選框
  • 單個復(fù)選框,直接綁定一個布爾值,可以用 v--modelv--bind。
  • 多個復(fù)選框
    (1)若組合使用,需要 v--model 配合 value 使用,v--model 綁定一個數(shù)組;
    (2)若綁定的是字符串,則會轉(zhuǎn)化為 truefalse,與所有綁定的復(fù)選框checked 屬性相對應(yīng)。
<div id="app">
    單個復(fù)選框---v-bind:<input type="checkbox" v-bind:checked="onecheck"> <br>
    單個復(fù)選框---v-model:<input type="checkbox" v-model="onecheckbox"> <br>
    多個復(fù)選框:
    <input type="checkbox" value="香蕉" v-model="checks"> 香蕉
    <input type="checkbox" value="蘋果" v-model="checks"> 蘋果
    <input type="checkbox" value="桃子" v-model="checks"> 桃子
    現(xiàn)在選中了:{{checks}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            onecheck: true,
            onecheckbox: true,
            cheks: []
        }
    })
</script>
4. 下拉框
  • 單選的下拉框,所綁定的 value 初始化值可以為字符串,也可以為數(shù)組;若有 value 會直接優(yōu)先匹配一個 value 值,沒有 value 則匹配一個 text 值。
  • 多選的下拉框,需要 v--model 配合 value 來使用,v--model 綁定一個數(shù)組,與復(fù)選框類似。
    注意v--model 一定是綁定在 select 標(biāo)簽上。
<div id="app">
    單選下拉框:
    <select v-model="selected">
        <option value="小貓">小貓</option>
        <option value="小狗">小狗</option>
        <option value="小刺猬">小刺猬</option>
    </select>
    現(xiàn)在選中的是 {{selected}}
    <br><br><br><br>
    多選下拉框(按Ctrl鍵點選):
    <select v-model="selectedmul" multiple>
        <option value="小貓">小貓</option>
        <option value="小狗">小狗</option>
        <option value="小刺猬">小刺猬</option>
    </select>
    現(xiàn)在選中的是 {{selectedmul}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            selected: '',
            selectedmul: []
        }
    })
</script>
5. 總結(jié)
  • 如果是單選,初始化最好給定字符串,因為 v--model 此時綁定的是靜態(tài)字符串或者布爾值。
  • 如果是多選,初始化最好給定一個數(shù)組。

二、綁定值

1. 單選按鈕

只需要用 v--bind 給單個單選框綁定一個 value 值,此時 v--model 綁定的就是它的 value 值。

<div id="app">
    <input type="radio" v-model="picked" v-bind:value="value"> ----{{picked}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            picked: true,
            value: '111', 
        }
    })
</script>

上例中,起初 v-model 并沒有生效;手動選中單選框后,v--model 綁定的 picked 會被替換成 value 的值。

2. 復(fù)選框

動態(tài)控制,使復(fù)選框選中和未選中時的 value 不同:復(fù)選框選中時取的是 true-value 的值,未選中時取的是 false-value 的值。

<div id="app">
    <input type="checkbox" v-model="toggle" :true-value="value1" :false-value="value2">
    {{toggle}}
    被選中:{{toggle == value1}}
    未被選中:{{toggle == value2}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            toggle: true,
            value1: '我被選中了',
            value2: '我未被選中'
        }
    })
</script>
3. 下拉框

在 select 標(biāo)簽上綁定 value 值對 option 并沒有影響。

<div id="app">
    綁定在select上:
    <select v-model="valueselect1" :value="{num:111}">
        <option value="小貓">小貓</option>
    </select>
    現(xiàn)在選中的是 {{typeof valueselect1}} --- {{valueselect1}} <br>

    綁定在option上:
    <select v-model="valueselect2">
        <option value="小貓" :value="{num:111}">小貓</option>
    </select>
    現(xiàn)在選中的是 {{typeof valueselect2}} --- {{valueselect2}}
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            valueselect1: '',
            valueselect2: ''
        }
    })
</script>

三、修飾符

  1. lazy
    v--model 默認(rèn)是在 input 輸入時實時同步輸入框的數(shù)據(jù),而 .lazy 修飾符可以使其在失去焦點或敲回車鍵之后再更新。
  2. number
    將輸入的字符串轉(zhuǎn)化為 number 類型。
  3. trim
    trim 會自動過濾輸入過程中首尾輸入的空格。
<div id="app">
    1. lazy
    <input type="text" v-model="inputStr1"> --- {{inputStr1}} <br>
    <input type="text" v-model.lazy="lazyStr"> --- {{lazyStr}} <br>
    2. number  <br>
    <input type="text" v-model.number="inputStr2"> --- {{typeof inputStr2}} <br>
    <input type="text" v-model.number="isNum"> --- {{typeof isNum}} <br>
    3. trim <br>
    <input type="text" v-model="inputStr3"> length: {{inputStr3.split('').length}} <br>
    <input type="text" v-model.trim="trimStr"> length: {{trimStr.split('').length}} <br>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            inputStr1: '',
            lazyStr: '',
            inputStr2: '',
            isNum: '',
            inputStr3: '',
            trimStr: ''
        }
    })
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容