Vue中v-model的使用示例詳解
一,v-model是什么
v-model就是vue的雙向綁定的指令,能將頁面上控件輸入的值同步更新到相關(guān)綁定的data屬性,也會在更新data綁定屬性時(shí)候,更新頁面上輸入控件的值。
二,為什么使用v-model
v-model作為雙向綁定指令也是vue兩大核心功能之一,使用非常方便,提高前端開發(fā)效率。在view層,model層相互需要數(shù)據(jù)交互,即可使用v-model。
三,v-model的原理簡單描述
v-model主要提供了兩個(gè)功能,view層輸入值影響data的屬性值,data屬性值發(fā)生改變會更新view層的數(shù)值變化。
四,用途
用于在表單類元素(單選、多選、下拉選擇、輸入框等)上雙向綁定數(shù)據(jù)。
簡單使用
v-model與input輸入框的搭配使用:
<div id="app"> <input type="text" v-model="message" placeholder="輸入...."/> <p>輸入的內(nèi)容是:{{message}}</p> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ message:'' } }) </script>
注意
使用v-model后:
1.表單控件顯示的值只依賴所綁定的數(shù)據(jù),不再關(guān)心初始化時(shí)的value屬性
2.對于在之間插入的值,也不會生效
3.使用v-model時(shí),如果是用中文輸入法輸入中文,一般在沒有選定詞組前,也就是拼音階段,Vue是不會更新數(shù)據(jù)的,當(dāng)敲下漢字時(shí)才會觸發(fā)更新。如果希望總是實(shí)時(shí)更新,可以使用@input代替v-model
用法:
<div id="app"> <textarea @input="handleInput" placeholder="輸入..."></textarea> <p>輸入的內(nèi)容是:</p> <p style="white-space: pre;">{{text}}</p> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ text:'' }, methods:{ handleInput:function(e){ this.text = e.target.value; } } }) </script>
單選按鈕上使用
單選按鈕在單獨(dú)使用時(shí),不需要v-model,直接使用v-bind綁定一個(gè)布爾類型的值,為真時(shí)選中,為否時(shí)不選。
例:
<div id="app"> <input type="radio" :checked="picked"/> <label>單選按鈕</label> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ picked:true } }) </script>
如果是組合使用來實(shí)現(xiàn)互斥選擇的效果,就需要v-model配合value來使用。
例:
<div id="app"> <input type="radio" v-model="picked" id="badminton" value="羽毛球" /> <label for="badminton">羽毛球</label> <br/> <input type="radio" v-model="picked" id="basketball" value="籃球" /> <label for="basketball">籃球</label> <br/> <input type="radio" v-model="picked" id="football" value="足球" /> <label for="football">足球</label> <br/> <p>選擇的項(xiàng)是:{{picked}}</p> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ picked:"籃球" } }) </script>
數(shù)據(jù)的picked值與單選按鈕的value值一致時(shí),就會選中該項(xiàng)。
復(fù)選框上使用
復(fù)選框也分單獨(dú)使用和組合使用,不過用法稍與單選不同。復(fù)選框單獨(dú)使用時(shí),是用v-model來綁定一個(gè)布爾值。
例:
在勾選時(shí),數(shù)據(jù)checked的值變?yōu)榱藅rue,label中渲染的內(nèi)容也會更新。
<div id="app"> <input type="checkbox" v-model="checked" id="checked"/> <label for="checked">選擇狀態(tài):{{checked}}</label> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ checked:false } }) </script>
組合使用時(shí),也是v-model與value一起,多個(gè)勾選框都綁定到同一個(gè)數(shù)組類型的數(shù)據(jù),value的值在數(shù)組當(dāng)中,就會選中這一項(xiàng)。這一過程也是雙向的,在勾選時(shí),value的值也會自動(dòng)push到這個(gè)數(shù)組中。
例:
<div id="app"> <input type="checkbox" v-model="checked" id="badminton" value="羽毛球" /> <label for="badminton">羽毛球</label> <br/> <input type="checkbox" v-model="checked" id="basketball" value="籃球" /> <label for="basketball">籃球</label> <br/> <input type="checkbox" v-model="checked" id="football" value="足球" /> <label for="football">足球</label> <br/> <p>選擇的項(xiàng)是:{{checked}}</p> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ checked:['羽毛球', '籃球'] } }) </script>
選擇列表上使用
選擇列表就是下拉選擇器,也就是常見的表單控件,同樣也分為單選和多選兩種。
單選例:
**備注:**option是備選項(xiàng),如果含有value屬性,v-model會優(yōu)先匹配value值;如果沒有,就會直接匹配option的text,比如選中第一項(xiàng)時(shí),selected的值是badminton,而不是羽毛球,但選中第二項(xiàng)時(shí),由于沒有value屬性,selected的值就是籃球。
<div id="app"> <select v-model="selected"> <option value ="badminton">羽毛球</option> <option>籃球</option> <option>足球</option> </select> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ selected:'籃球' } }) </script>
多選例:
**備注:**給添加屬性multiple就可以多選了,此時(shí)v-model綁定的是一個(gè)數(shù)組,與復(fù)選框用法類似。
<div id="app"> <select v-model="selected" <multiple></multiple>> <option v-for="item in options" :value="item.value">{{item.text}}</option> </select> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ selected:'basketball', options:[ {text:'籃球', value:'basketball'}, {text:'羽毛球', value:'badminton'}, {text:'足球', value:'football'} ] } }) </script>
注:雖然用選擇列表可以很簡單地完成下拉選擇的需求,但在實(shí)際業(yè)務(wù)中由于樣式依賴平臺和瀏覽器,無法統(tǒng)一,也不太美觀,功能也受限,比如不支持搜索,故并不常用。常見的解決方案是用div模擬一個(gè)類似的控件。
修飾符
與事件修飾符類似,v-model也有修飾符,用于控制數(shù)據(jù)同步的時(shí)機(jī)。
.lazy
在輸入框中,v-model默認(rèn)是在input事件中同步輸入框的數(shù)據(jù)(除了提示中介紹的中文輸入 法情況外),使用修飾符.lazy會轉(zhuǎn)變?yōu)樵赾hange事件中同步,示例代碼如下:
<div id="app"> <input type="text" v-model.lazy="message"/> <p>{{message}}</p> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ message:'' } }) </script>
這時(shí),message并不是實(shí)時(shí)改變的,而是在失焦或按回車時(shí)才更新。
.number
使用修飾符.number可以將輸入轉(zhuǎn)換為Number類型,否則雖然你輸入的是數(shù)字,但它的類型其實(shí)是String,比如在數(shù)字輸入框時(shí)會比較有用,示例代碼如下:
<div id="app"> <input type="number" v-model.number="message"/> <p>{{message}}</p> </div> <script type="text/javascript" src="../js/vue.js"> </script> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ message:'' } }) </script>
.trim
修飾符.trim可以自動(dòng)過濾輸入的首尾空格,示例代碼如下:
到此這篇關(guān)于Vue中v-model的使用示例詳解的文章就介紹到這了,更多相關(guān)Vue v-model使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue中指令v-model的原理及使用方法
- Vue3?使用v-model實(shí)現(xiàn)父子組件通信的方法(常用在組件封裝規(guī)范中)
- vue3的組件通信&v-model使用實(shí)例詳解
- vue3中使用v-model實(shí)現(xiàn)父子組件數(shù)據(jù)同步的三種方案
- Vue3中如何使用v-model高級用法參數(shù)綁定傳值
- Vue中使用v-model雙向數(shù)據(jù)綁定select、checked等多種表單元素的方法
- vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用)
- 使用vue初用antd 用v-model來雙向綁定Form表單問題
- Vue組件上使用v-model之單選框
相關(guān)文章
vue 動(dòng)態(tài)組件(component :is) 和 dom元素限制(is)用法說明
這篇文章主要介紹了vue 動(dòng)態(tài)組件(component :is) 和 dom元素限制(is)用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09vue使用jsonp抓取qq音樂數(shù)據(jù)的方法
這篇文章主要介紹了vue使用jsonp抓取qq音樂數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Mock.js在Vue項(xiàng)目中的使用小結(jié)
這篇文章主要介紹了Mock.js在Vue項(xiàng)目中的使用,在vue.config.js中配置devServer,在before屬性中引入接口路由函數(shù),詳細(xì)步驟跟隨小編通過本文學(xué)習(xí)吧2022-07-07vue+echarts實(shí)現(xiàn)動(dòng)態(tài)折線圖的方法與注意
這篇文章主要給大家介紹了關(guān)于vue+echarts實(shí)現(xiàn)動(dòng)態(tài)折線圖的方法與注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09解決element-ui的el-dialog組件中調(diào)用ref無效的問題
這篇文章主要介紹了解決element-ui的el-dialog組件中調(diào)用ref無效的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Vue/React子組件實(shí)例暴露方法(TypeScript)
最近幾個(gè)月都在用TS開發(fā)各種項(xiàng)目,框架有涉及到Vue3,React18等,記錄一下Vue/React組件暴露出變量/函數(shù)的方法的寫法,對vue?react組件暴露方法相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-11-11