- DOCTYPE html>
-
-
Title - {{message}}
- const app = new Vue({
- el: '#app',
- data: {
- message: "hello"
- }
- })
v-model双向绑定,既输入框的value改变,对应的message对象值也会改变,修改message的值,input的value也会随之改变。无论改变那个值,另外一个值都会变化。
- DOCTYPE html>
-
-
Title -
-
- {{message}}
- const app = new Vue({
- el: '#app',
- data: {
- message: "hello world"
- },
- methods: {
- changeValue(event){
- console.log("值改变了");
- this.message = event.target.value
- }
- }
- })
先来一个demo实现不使用v-model实现双向绑定。
v-model = v-bind + v-on,实现双向绑定需要是用v-bind和v-on,使用v-bind给input的value绑定message对象,此时message对象改变,input的值也会改变。但是改变input的value并不会改变message的值,此时需要一个v-on绑定一个方法,监听事件,当input的值改变的时候,将最新的值赋值给message对象。$event获取事件对象,target获取监听的对象dom,value获取最新的值。
- "app">
-
- <label for="male">
- <input type="radio" id="male" name="sex" value="男" v-model="sex">男
- label>
- <label for="female">
- <input type="radio" id="female" name="sex" value="女" v-model="sex">女
- label>
- <div>你选择的性别是:{{sex}}div>
-
- div>
- <script src="../js/vue.js">script>
- <script>
- const app = new Vue({
- el:"#app",
- data:{
- message:"zzz",
- sex:"男"
- },
-
- })
- script>
radio单选框的name属性是互斥的,如果使用v-model,可以不使用name就可以互斥。
v-model绑定`sex`属性,初始值为“男”,选择女后`sex`属性变成“女”,因为此时是双向绑定。
4. v-model结合checkbox类型使用
- DOCTYPE html>
-
-
Title -
-
多选框
-
- {{item}}
-
-
你的爱好是:{{hobbies}}
- const app = new Vue({
- el: '#app',
- data: {
- hobbies: [],
- hhobbies: ["篮球","足球","乒乓球","羽毛球"]
-
- }
- })
- checkbox结合v-model实现单选框,定义变量
isAgree初始化为false,点击checkbox的值为true,isAgree也是true。 - checkbox结合v-model实现多选框,定义数组对象
hobbies,用于存放爱好,将hobbies与checkbox对象双向绑定,此时选中,一个多选框,就多一个true,hobbies就添加一个对象。
5. v-model结合select
- DOCTYPE html>
-
-
-
-
v-model结合select类型 -
-
-
-
-
-
-
-
你选择的水果是:{{fruit}}
-
-
-
-
-
-
-
-
你选择的水果是:{{fruits}}
-
-
-
- const app = new Vue({
- el:"#app",
- data:{
- fruit:"苹果",
- fruits:[]
- },
-
- })
-
v-model结合select可以单选也可以多选。
6. v-model的修饰符的使用
- DOCTYPE html>
-
-
-
-
v-model修饰符 -
-
v-model修饰符
-
lazy,默认情况是实时更新数据,加上lazy,从输入框失去焦点,按下enter都会更新数据
-
- {{message}}
-
修饰符number,默认是string类型,使用number赋值为number类型
-
- {{age}}--{{typeof age}}
-
修饰符trim:去空格
-
-
-
-
- const app = new Vue({
- el:"#app",
- data:{
- message:"zzz",
- age:18,
- name:"ttt"
- },
-
- })
-
lazy:默认情况下是实时更新数据,加上lazy,从输入框失去焦点,按下enter都会更新数据。number:默认是string类型,使用number复制为number类型。trim:用于自动过滤用户输入的首尾空白字符