表单输入绑定

基础用法

你可以用 v-model 指令在表单 <input><textarea><select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

v-model 会忽略所有表单元素的 valuecheckedselected 特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:

  • text 和 textarea 元素使用 value 属性和 input 事件;
  • checkbox 和 radio 使用 checked 属性和 change 事件;
  • select 字段将 value 作为 prop 并将 change 作为事件。

对于需要使用输入法 (如中文、日文、韩文等) 的语言,你会发现 v-model 不会在输入法组合文字过程中得到更新。如果你也想处理这个过程,请使用 input 事件。

文本

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

Message is:

多行文本

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

Multiline message is:

在文本区域插值 (<textarea>{{text}}</textarea>) 并不会生效,应用 v-model 来代替。

复选框

单个复选框,绑定到布尔值:

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

false

多个复选框,绑定到同一个数组:

<div id='example-3'><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>
</div>
new Vue({el: '#example-3',data: {checkedNames: []}
})

Jack John Mike
Checked names: []

单选按钮

<div id="example-4"><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>
</div>
new Vue({el: '#example-4',data: {picked: ''}
})

One
Two
Picked:

选择框

单选时:

<div id="example-5"><select v-model="selected"><option disabled value="">请选择</option><option>A</option><option>B</option><option>C</option></select><span>Selected: {{ selected }}</span>
</div>
new Vue({el: '...',data: {selected: ''}
})

Selected:

如果 v-model 表达式的初始值未能匹配任何选项,<select> 元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。因此,更推荐像上面这样提供一个值为空的禁用选项。

多选时 (绑定到一个数组):

<div id="example-6"><select v-model="selected" multiple style="width: 50px;"><option>A</option><option>B</option><option>C</option></select><br><span>Selected: {{ selected }}</span>
</div>
new Vue({el: '#example-6',data: {selected: []}
})

Selected: []

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' }]}
})

Selected: A

值绑定

对于单选按钮,复选框及选择框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值):

<!-- 当选中时,`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>

但是有时我们可能想把值绑定到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。

复选框

<inputtype="checkbox"v-model="toggle"true-value="yes"false-value="no"
>
// 当选中时
vm.toggle === 'yes'
// 当没有选中时
vm.toggle === 'no'

这里的 true-valuefalse-value 特性并不会影响输入控件的 value 特性,因为浏览器在提交表单时并不会包含未被选中的复选框。如果要确保表单中这两个值中的一个能够被提交,(比如“yes”或“no”),请换用单选按钮。

单选按钮

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

选择框的选项

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

修饰符

.lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

.number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

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

这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。

.trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg">

Vue表单输入绑定(元婴中期)相关推荐

  1. Vue表单输入绑定(文本框和复选框)

    文本框 <!DOCTYPE html> <html>     <head>         <meta charset="utf-8"&g ...

  2. 9.Vue 表单输入绑定

    基础用法 你可以用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定.它会根据控件类型自动选取正确的方 ...

  3. Vue007_ 表单输入绑定

    表单输入绑定 使用 v-model  对表单数据自动收集 1) text/textarea 2) checkbox 3) radio 4) select <!DOCTYPE html> & ...

  4. uniapp 输入法画面_表单输入绑定 · uni-app跨平台移动应用开发 · 看云

    # 表单输入绑定 ## [基础用法](https://cn.vuejs.org/v2/guide/forms.html#%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95 &qu ...

  5. Vue.js 表单输入绑定

    基础用法 你可以用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定.它会根据控件类型自动选取正确的方 ...

  6. Vue学习笔记(六) 表单输入绑定

    v-model 指令在表单元素上创建双向数据绑定,它负责用于监听用户输入事件以更新数据 注意,v-model 会忽略所有表单元素特性的初始值,而总是将 Vue 实例的数据作为数据来源 1.输入框 &l ...

  7. Vue表单双向绑定显示 ,小程序水果外卖水果外卖模式 水果外卖怎么做 做个水果蔬菜配送的小程序 外卖水果小程序 水果店小程序门店

    <div id="app"><p>input 元素:</p><input v-model="message" plac ...

  8. Vue - 表单

    表单输入绑定 用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.尽管有些神奇,但 ...

  9. Vue基础-09-表单输入绑定

    Vue基础-09-表单输入绑定 Vue中想要操作表单的数据,无需再dom操作.比如登录.注册.添加 Vue中提供了一个指令v-model,可以表单的双向数据绑定 双向绑定 表单原始上面通过v-mode ...

最新文章

  1. AI黑科技:呵护地球,我们是认真的
  2. 我会手动创建线程,为什么让我使用线程池?
  3. 用友二次开发_详解ERP系统与MES系统的数据传递——永康用友
  4. linux上配置spark集群
  5. 从零开始学习Hadoop--第2章 第一个MapReduce程序
  6. bios设置开机双系统选择_打破专家的断言,突破微软和英特尔的封锁,惠普电脑玩转双系统...
  7. 在哪个Linux发行版上运行python,怎么在linux上运行python
  8. 解决securecrt rz 上传rar,gif文件不正确问题【转】
  9. innodb 关键特性、缓冲池、插入缓冲、两次写
  10. win系统常用的运行命令
  11. Linux 交叉编译工具链
  12. 矩阵的对称性,自反性和反对称性的判断
  13. 圆点横线圆点 html,目录的点怎么打(目录中小圆点横线上的点要一个个打上去?)...
  14. Harvester云计算超融合基础架构HCI软件
  15. 正版2008服务器多少钱,Windows server 2008 R2正版报价多少
  16. Hive基础知识概念
  17. underscore.js 报_is not defined解决方法
  18. 怎样进行大数据的入门级学习?
  19. Android 实现一键反混淆功能
  20. 51单片机的蓝牙电子秤设计

热门文章

  1. Android6.0下的短信接收与发送功能的实现
  2. CodeForces - 1359
  3. Linux下 timerfd创建定时器并使用 epoll 监听
  4. 盒子模型(Box Model)
  5. Could not build wheels for xx which use PEP 517 and cannot be installed directly
  6. MiniGUI中的几个画线函数
  7. ReactOS的SVN服务器
  8. 信息系统安全等级保护流程
  9. 最简单的全球基站定位接口API
  10. 如何快速求出与n互素的数有多少个?