Vue.js 学习(8) -- v-model: 表单控件绑定

本文详细介绍了Vue.js中v-model指令的工作原理及其用法。通过多个示例展示了如何在不同类型的表单元素上应用v-model实现双向数据绑定,包括文本输入框、复选框、单选按钮等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础

v-model可以在表单控件元素(例如input)上创建双向数据绑定:
代码修改v-model后的变量值,那么控件的值也会随之改变;控件的值被用户修改,v-model绑定的变量也会被改变。

其实,v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端的例子。

几个最简单的栗子:

input:

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

运行结果就是,当用户在input对话框内输入信息时,p标签中的内容也会实时更新。

textarea:

<span>Multiline message is:</span>
<p style="white-space: pre">{{ message }}</p>
<br>
<textarea v-model="message" placeholder="add multiple lines"></textarea>

复选框:

<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>

多个复选框:

<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
new Vue({
  el: '...',
  data: {
    checkedNames: []
  }
})

单选按钮:

<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>

单选列表:

<select v-model="selected">
  <option disabled value="">Please select one</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>

多选列表:

<select v-model="selected" multiple>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<br>
<span>Selected: {{ selected }}</span>

多选列表结合v-for指令:

<select v-model="selected">
  <option v-for="option in options" v-bind:value="option.value">
    {{ option.text }}
  </option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
  el: '...',
  data: {
    selected: 'A',
    options: [
      { text: 'One', value: 'A' },
      { text: 'Two', value: 'B' },
      { text: 'Three', value: 'C' }
    ]
  }
})

进阶:v-model & v-bind

当我们使用v-model将单选按钮,勾选框及选择列表等元素与变量双向绑定时,通常都是将变量值绑定为这些元素的value:

<!-- 当选中时,`picked` 为字符串 "a" -->
<input type="radio" v-model="picked" value="a">

<!-- `toggle` 为 true 或 false -->
<input type="checkbox" v-model="toggle">

<!-- 当选中时,`selected` 为字符串 "abc" -->
<select v-model="selected">
  <option value="abc">ABC</option>
</select>

但是有时候,我们希望value是动态变化的,也就是,希望value是vue实例的一个动态属性。这是,我们可以使用前几节学过的v-bind来实现:

checkbox:

<input
  type="checkbox"
  v-model="toggle"
  v-bind:true-value="a"
  v-bind:false-value="b"
>
// 当选中时
vm.toggle === vm.a
// 当没有选中时
vm.toggle === vm.b

radio:

<input type="radio" v-model="pick" v-bind:value="a">
// 当选中时
vm.pick === vm.a

select:

<select v-model="selected">
    <!-- 内联对象字面量 -->
  <option v-bind:value="{ number: 123 }">123</option>
</select>
// 当选中时
typeof vm.selected // -> 'object'
vm.selected.number // -> 123

修饰符

1、.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据 (除了上述 IME 部分),但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步。

2、number
如果想自动将用户的输入值转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值。

<input v-model.number="age" type="number">

3、trim
如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入。

<input v-model.trim="msg">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值