一、 v-model的基本使用
v-model双向绑定,既输入框的value改变,对应的message对象值也会改变,修改message的值,input的value也会随之改变。无论改变那个值,另外一个值都会变化。
1 2 3 4 5 6 7 8 9 10 | < title >Title</ title >< div id = "app" > {{message}} </ div > const app = new Vue({ el: '#app', data: { message: "hello" } }) |
二、 v-model的原理
先来一个demo实现不使用v-model实现双向绑定。
实现双向绑定需要是用v-bind和v-on,使用v-bind给input的value绑定message对象,此时message对象改变,input的值也会改变。但是改变input的value并不会改变message的值,此时需要一个v-on绑定一个方法,监听事件,当input的值改变的时候,将最新的值赋值给message对象。获取事件对象,target获取监听的对象dom,value获取最新的值。v-model = v-bind + v-on
$event
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | < title >Title</ title >< div id = "app" > {{message}} </ div > const app = new Vue({ el: '#app', data: { message: "hello world" }, methods: { changeValue(event){ console.log("值改变了"); this.message = event.target.value } } }) |
三、 v-model结合radio类型使用
radio单选框的属性是互斥的,如果使用v-model,可以不使用name就可以互斥。
v-model绑定`sex`属性,初始值为“男”,选择女后`sex`属性变成“女”,因为此时是双向绑定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <div id= "app" > <label for = "male" > 男 </label> <label for = "female" > 女 </label> <div>你选择的性别是:{{sex}}</div> </div> const app = new Vue({ el: "#app" , data:{ message: "zzz" , sex: "男" }, }) |
四、 v-model结合复选框类型使用
checkbox可以结合v-model做单选框,也可以多选框。
checkbox结合v-model实现单选框,定义变量初始化为,点击checkbox的值为,也是。isAgree
false
true
isAgree
true
checkbox结合v-model实现多选框,定义数组对象,用于存放爱好,将与checkbox对象双向绑定,此时选中,一个多选框,就多一个true,就添加一个对象。hobbies
hobbies
hhobbies
单选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < title >Title</ title >< div id = "app" > < h2 >单选框</ h2 > < label for = "agree" > 同意协议 </ label > < h3 >您的选选择是:{{isAgree}}</ h3 > < button >下一步</ button > </ div > const app = new Vue({ el: '#app', data: { isAgree: true } }) |
多选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < title >Title</ title >< div id = "app" > < h2 >多选框</ h2 > 篮球 足球 羽毛球 乒乓球 < h2 >你的爱好是:{{hobbies}}</ h2 > </ div > const app = new Vue({ el: '#app', data: { hobbies: [] } }) |
值的绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < title >Title</ title >< div id = "app" > < h2 >多选框</ h2 > < label > {{item}} </ label > < h2 >你的爱好是:{{hobbies}}</ h2 > </ div > const app = new Vue({ el: '#app', data: { hobbies: [], hhobbies: ["篮球","足球","乒乓球","羽毛球"] } }) |
五、 v-model结合select
v-model结合select可以单选也可以多选。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < title >v-model结合select类型</ title >< div id = "app" > 苹果 香蕉 西瓜< h2 >你选择的水果是:{{fruit}}</ h2 > 苹果 香蕉 西瓜< h2 >你选择的水果是:{{fruits}}</ h2 > </ div > const app = new Vue({ el:"#app", data:{ fruit:"苹果", fruits:[] }, }) |
六、 v-model的修饰符的使用
-
lazy
:默认情况下是实时更新数据,加上,从输入框失去焦点,按下enter都会更新数据 -
number
:默认是字符串类型,使用复制为数字类型 -
trim
:用于自动过滤用户输入的首尾空白字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < title >v-model修饰符</ title >< div id = "app" > < h2 >v-model修饰符</ h2 > < h3 >lazy,默认情况是实时更新数据,加上lazy,从输入框失去焦点,按下enter都会更新数据</ h3 > < div >{{message}}</ div > < h3 >修饰符number,默认是string类型,使用number赋值为number类型</ h3 > < div >{{age}}--{{typeof age}}</ div > < h3 >修饰符trim:去空格</ h3 > </ div > const app = new Vue({ el:"#app", data:{ message:"zzz", age:18, name:"ttt" }, }) |
到此这篇关于Vue 中v-model的完整用法(v-model的实现原理)的文章就介绍到这了,更多相关vue v-model用法内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!