vue表单实现双向绑定
Vue 表单实现双向绑定
Vue 提供了 v-model 指令来实现表单元素的双向数据绑定。以下是常见表单元素的双向绑定实现方法:
文本输入框
<input type="text" v-model="message">
<p>{{ message }}</p>
data() {
return {
message: ''
}
}
多行文本
<textarea v-model="message"></textarea>
<p>{{ message }}</p>
复选框
单个复选框绑定到布尔值:
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
多个复选框绑定到数组:
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<p>{{ checkedNames }}</p>
data() {
return {
checkedNames: []
}
}
单选按钮
<input type="radio" id="one" value="One" v-model="picked">
<input type="radio" id="two" value="Two" v-model="picked">
<p>{{ picked }}</p>
选择框
单选:

<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<p>{{ selected }}</p>
多选(绑定到数组):
<select v-model="selected" multiple>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<p>{{ selected }}</p>
修饰符
.lazy - 将 input 事件转为 change 事件:
<input v-model.lazy="msg">
.number - 自动将输入值转为数字:

<input v-model.number="age" type="number">
.trim - 自动去除用户输入的首尾空白:
<input v-model.trim="msg">
自定义组件实现 v-model
在自定义组件中实现双向绑定:
<custom-input v-model="searchText"></custom-input>
// 子组件
props: ['modelValue'],
emits: ['update:modelValue'],
template: `
<input
:value="modelValue"
@input="$emit('update:modelValue', $event.target.value)"
>
`
对于 Vue 3,可以使用 v-model 的参数:
<custom-input v-model:title="bookTitle"></custom-input>
// 子组件
props: ['title'],
emits: ['update:title']
这些方法覆盖了 Vue 中实现表单双向绑定的主要场景和技巧。






