Vue中v-model的使用

本文详细介绍了Vue.js中v-model指令的使用,包括文本输入、文本域、单选按钮、复选框、下拉选择等表单元素的双向数据绑定。同时,还探讨了v-model的修饰符,如.lazy、.number和.trim,分别用于改变数据同步时机、转换输入值类型和去除首尾空格。通过实例展示了如何在实际开发中灵活运用这些特性。
摘要由CSDN通过智能技术生成

基本用法和绑定值

v-model完成表单数据的双向绑定(表单控件:单选、多选、下拉选择、输入框)

            <div id="app">
             <!-- 对于输入表单 -->
             <input type="text" v-model="name" placeholder="请输入...">
             <h1>hello {{name}}</h1>
             <br />
             <!-- 对于文本域 -->
             <textarea v-model="text" placeholder="输入文本.."></textarea>
             <p>{{text}}</p>
             <br/>
             <!-- 输入实时更新用@input -->
             <textarea @input="handleInput" placeholder="输入.."></textarea>
             <p>{{text2}}</p>
             <br/>
             <!-- 单选按钮 :单独使用时不需要v-model,v-bind绑定一个布尔类型的值即可-->
             <input type="radio" :checked="picked">
             <label>单选按钮</label>
             <br>
             <!-- 组合使用实现互斥选择效果:使用v-model配合value使用 -->
             <!-- 数据picked2的值与单选按钮的value值一致时,就会选中该项,所以当选选中的是JavaScript -->
             <input type="radio" v-model="picked2" value="html" id="html">
             <label for="html"> HTML</label>
             <br>
             <input type="radio" v-model="picked2" value="js" id='js'>
             <label for="js">JavaScript</label>
             <br>
             <input type="radio" v-model="picked2" value="css" id='css'>
             <label for="css">CSS</label>
             <br>
             <!-- 复选框使用v-model -->
             <!-- 但单独使用时,勾选时checked的值变为true,lable中渲染的内容也会更新 -->
             <input type="checkbox" v-model="checked" id='checked' />
             <label for="checked">选择状态:{{checked}}</label>
             <br />
             <!-- 组合使用时,v-model和value一起,多个勾选框都绑定到同一数组类型的数据 -->
             <!-- 初始情况下,value的值在数组中就会选中该项,其它勾选时,value的值会自动push到这个数组中 -->
             <input type="checkbox" v-model="checked2" value='html' id='html2' />
             <label for="html2">HTML</label>
             <br />
             <input type="checkbox" v-model="checked2" value='js' id='js2' />
             <label for="js2">JavaScript</label>
             <br />
             <input type="checkbox" v-model="checked2" value='css' id='css2' />
             <label for="css2">CSS</label>
             <br />
             <p>选择的选项是:{{checked2}}</p>
             
             <!-- 选择列表(下拉选择器)-->
             <!-- 单选形式:如果selected里包含value的值会优先匹配,没有就直接匹配<option>的text -->
             <select v-model="selected">
                 <option>html</option>
                 <option value="js">JavaScript</option>
                 <option>css</option>
             </select>
             <p>选择的项:{{selected}}</p>
             <br />
             <!-- 多选形式 -->
             <select v-model="selected2" multiple="true">
                    <option>html</option>
                    <option value="js">JavaScript</option>
                    <option>css</option>
             </select>
             <p>选择的项:{{selected2}}</p>
             
             <!-- 绑定值 :v-model绑定的值是一个静态字符串或布尔值,有时需要绑定一个动态数据可以用v-bind实现-->
             <!-- 单选按钮:选择时 app.picked3===app.value为123 -->
             <input type="radio" v-model="picked3" :value="value" />
             <label>tt单选按钮</label>
             <p>{{picked3}}</p>
             <p>{{value}}</p>
             <!-- 复选框 -->
             <!-- 勾选时app.taggle===app.value1,未勾选时,app.toggle===app.value2 -->
             <input type="checkbox" v-model="toggle" :true-value="value1" :false-value="value2" />
             <label>tt复选框</label>
             <p>{{toggle}}</p>
             <p>{{value1}}</p>
             <p>{{value2}}</p>
             <!-- 选择列表 -->
             <!-- 当选中时,app.select是一个对象,所以app.select.number===123 -->
             <select v-model="select">
                 <option :value="{number:123}">123</option>
             </select>
             {{select}}
             {{select.number}}
             
         </div>
         <script>
             Vue.config.productionTip = false //阻止vue在启动时生成生产提示
             var app = new Vue({
                 el:'#app',
                 data:{  
                     name:'',
                     text:'',
                     text2:'',
                     picked:true,
                     picked2:'js',
                     checked:false,
                     checked2:['html'],
                     selected:'html',
                     selected2:['html','js'],
                     picked3:false,
                     value:123,
                     toggle:false,
                     value1:'a',
                     value2:'b',
                     select:''
                 },
                 methods:{
                     handleInput:function(e){
                         this.text2=e.target.value;
                     }
                 }
            
             })
         </script>

修饰符

  • .lazy:在输入框中,v-model默认是在input事件中同步输入框中的数据,使用.lazy修饰符会转变为在change事件中同步

  • .number:可以将输入转换为Number类型,否则虽然你输入的是数字,但它的类型是String

  • .trim:自动过滤输入的首位空格

<!-- .lazy :输入可以发现message不是实时改变的,而是在失焦或按回车时才更新-->
<input type="text" v-model.lazy="message"/>
<p>.lazy修饰的{{message}}</p>
<br />
<!-- .number -->
<input type="number" v-model.number="message2" />
<p>输入的值为:{{message2}},输入的类型为:{{typeof message2}}</p>
<!-- .trim -->
<input type="text" v-model.trim="message3"/>
<p>输入了:{{message3}}</p>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值