01 v-model的使用和原理
1.1 v-model
- 表单控件在实际开发中式非常常见的,特别是对于用户信息的提交,需要大量的表单
- Vue中使用v-model指令来实现表单元素和数据的双向绑定
- 案例解析:
- 当我们在输入框输入内容时
- 因为input中的v-model绑定了message,所以会实时将输入的内容传递给message,message发生改变
- 当message发生改变时,因为上面我们使用Mustache语法,将message的值插入到DOM中,所以会发生响应的改变
- 所以,通过v-model实现双向绑定
- 我们也可以将v-model用在textarea中
- v-model其实是一个语法糖,他背后的本质上是包含两个操作
- v-bind绑定一个value属性
- v-on指令给当前元素绑定input事件
<input type="text" v-model="message">
<input type="text" :value="message" @input="valueChange">
<input type="text" :value="message" @input="message = $event.target.value">
<h2>{{message}}</h2>
1.2 代码实战
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>01-v-model的使用</title>
</head>
<body>
<div id="app">
<input type="text" v-model="message">{{message}}
<hr>
<input type="text" :value="message" @input="valueChange">
<hr>
<input type="text" :value="message" @input="message = $event.target.value">
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el: '#app',
data: {
message: 'hello world!'
},
methods: {
valueChange(event){
this.message = event.target.value;
}
}
})
</script>
</body>
</html>
1.3 运行结果
02-v-model结合radio类型
2.1 实战代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>02-v-model结合radio类型</title>
</head>
<body>
<div id="app">
<label for="male">
<input type="radio" id="male" value="男" v-model="sex">男
</label>
<label for="female">
<input type="radio" id="female" value="女" v-model="sex">女
</label>
<h2>您选择的性别是:{{sex}}</h2>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el: '#app',
data: {
sex: '男'
}
})
</script>
</body>
</html>
2.2 运行结果
03-v-model结合checkbox类型
3.1 v-model:checkbox
- 复选框分为两种情况:单个勾选框和多个勾选框
- 单个勾选框:
- v-model即为布尔值
- 此时input的value并不影响v-model的值
- 多个复选框:
- 当是多个复选框时,因为可以选中多个,所以对应的data中属性是一个数组
- 当选中某一个时,就会将input的value添加到数组中
3.2 代码实战
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>03-v-model结合checkbox类型</title>
</head>
<body>
<div id="app">
<h2>{{message}}</h2>
<label for="license">
<input type="checkbox" id="license" v-model="isAgree">同意协议
</label>
<h2>您选择的是:{{isAgree}}</h2>
<button :disabled="!isAgree">下一步</button>
<hr>
<label for="">
<input type="checkbox" value="篮球" v-model="hobbies">篮球
<input type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
<input type="checkbox" value="排球" v-model="hobbies">排球
<input type="checkbox" value="足球" v-model="hobbies">足球
<input type="checkbox" value="乒乓球" v-model="hobbies">乒乓球
</label>
<h2>您选择的是:{{hobbies}}</h2>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el: '#app',
data: {
message: 'hello world!',
isAgree: false,
hobbies: []
}
})
</script>
</body>
</html>
3.3 运行结果
04-v-model结合select类型
4.1 v-model:select
- 和checkbox一样,select也分单选和多选两种情况
- 单选:只能选中一个值
- v-model绑定的是一个值
- 当我们选中option中的一个时,会将它对应的value赋值到mySelect中
- 多选:可以选中多个值
- v-model绑定的是一个数组
- 当选中多个值时,就会将选中的option对应的value添加到数组mySelects中
4.2 代码实战
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>04-v-model结合select类型</title>
</head>
<body>
<div id="app">
<select name="fruits" id="" v-model="fruit">
<option value="">--未选择--</option>
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="榴莲">榴莲</option>
<option value="葡萄">葡萄</option>
<option value="哈密瓜">哈密瓜</option>
</select>
<h2>您选择的水果是:{{fruit}}</h2>
<hr>
<select name="fruits" v-model="fruits" multiple>
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="榴莲">榴莲</option>
<option value="葡萄">葡萄</option>
<option value="哈密瓜">哈密瓜</option>
</select>
<h2>您选择的水果是:{{fruits}}</h2>
<hr>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el: '#app',
data: {
fruit: '',
fruits: []
}
})
</script>
</body>
</html>
4.3 运行结果
05-v-model修饰符的使用
5.1 v-model
- lazy修饰符
- 默认情况下,v-model默认是在input事件中同步输入框的数据
- 也就是说,一旦有数据发生改变对应的data中的数据就会自动发生改变
- lazy修饰符可以让数据在失去焦点或者回车时才会更新
- number修饰符
- 默认情况下,在输入框无论我们输入的是字母还是数字,都会被当做字符串类型进行处理
- 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理
- number修饰符可以让在输入框中输入的内容自动转成数字类型
- trim修饰符
- 如果输入的内容首尾有很多空格,通常我们希望将其去掉
- trim修饰符可以过滤内容左右两边的空格
5.2 代码实战
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>05-v-model修饰符的使用</title>
</head>
<body>
<div id="app">
<input type="text" v-model.lazy="message"><br>
<h2>{{message}}</h2>
<input type="number" v-model.number="age"><br>
<h2>{{age}}——{{typeof age}}</h2>
<input type="text" v-model.trim="name">
<h2>您输入的名字是:{{name}}</h2>
</div>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el: '#app',
data: {
message:'',
age:'',
name:''
}
})
</script>
</body>
</html>
5.3 运行结果