收集表单数据
示例:
<body>
<div id="app">
<form @submit.prevent="registUser">
账号:<input type="text" v-model.trim="account"><br>
密码:<input type="password" v-model="password"><br>
年龄:<input type="number" v-model.number="age"><br>
性别:
男<input type="radio" name="sex" value="male" v-model="sex">
女<input type="radio" name="sex" value="female" v-model="sex"><br>
爱好:
学习<input type="checkbox" name="hobby" v-model="hobby" value="study">
打游戏<input type="checkbox" name="hobby" v-model="hobby" value="playGame">
吃饭<input type="checkbox" name="hobby" v-model="hobby" value="eat">
<br>
地址:
<select v-model="city">
<option value="">---请选择---</option>
<option value="bj">北京</option>
<option value="wh">武汉</option>
<option value="zz">郑州</option>
<option value="sz">深圳</option>
</select>
<br>
其他信息:
<textarea v-model.lazy="other"></textarea>
<br>
<input type="checkbox" v-model="agree"> 阅读并接受<a href="https://www.baidu.com">《用户协议》</a>
<br>
<button>提交</button>
</form>
</div>
</body>
<script>
Vue.config.productionTip = false;
const vm = new Vue({
el: '#app',
data: {
account: '',
password: '',
age: '',
sex: 'female',
hobby: [],
city: '',
other: '',
agree: ''
},
methods: {
registUser() {
console.log(JSON.stringify(this._data));
}
}
});
</script>
如果是<input type='text' />
,则v-model
收集的是value
值,用户输入的就是value值。
如果是<input type='radio' />
,则v-model
收集的是value值,需要给标签配置value
属性。
如果是<input type='checkbox' />
,会有不同情况:
- 如果没有配置
value
属性,那么收集的就是checked
(这一组复选框是否勾选,是布尔值) 如果设置了
value
属性,根据v-model
绑定的变量的初始值不同而有不同的结果:v-model
绑定变量的初始值是字符串或布尔等非数组类型,那么收集的就是checked
v-model
绑定变量的初始值是数组,那么收集的就是value
组成的数组
v-model
有三个修饰符:
.lazy
:输入框失去焦点时,vue才会收集输入的数据.number
:输入的字符串转换为有效的数字.trim
:去除首位空格