Vue.js每天必学之表单控件绑定


Posted in Javascript onSeptember 05, 2016

基础用法

可以用 v-model 指令在表单控件元素上创建双向数据绑定。根据控件类型它自动选取正确的方法更新元素。尽管有点神奇,v-model 不过是语法糖,在用户输入事件中更新数据,以及特别处理一些极端例子。

Text

<span>Message is: {{ message }}</span>
<br>
<input type="text" v-model="message" placeholder="edit me">

Checkbox

单个勾选框,逻辑值:

<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 | json }}</span>
new Vue({
 el: '...',
 data: {
 checkedNames: []
 }
})

Radio

<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

单选:

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

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

<select v-model="selected" multiple>
 <option selected>A</option>
 <option>B</option>
 <option>C</option>
</select>
<br>
<span>Selected: {{ selected | json }}</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' }
 ]
 }
})

绑定 value

对于单选按钮,勾选框及选择框选项,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 到 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 Options

<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="msg" lazy>

number

如果想自动将用户的输入转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个特性 number:

<input v-model="age" number>

debounce

debounce 设置一个最小的延时,在每次敲击之后延时同步输入框的值与数据。如果每次更新都要进行高耗操作(例如在输入提示中 Ajax 请求),它较为有用。

<input v-model="msg" debounce="500">

注意 debounce 参数不会延迟 input 事件:它延迟“写入”底层数据。因此在使用 debounce 时应当用 vm.$watch() 响应数据的变化。若想延迟DOM 事件,应当使用 debounce 过滤器。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
javascript里绝对用的上的字符分割函数总结
Jul 31 Javascript
jQuery插件制作的实例教程
May 16 Javascript
浅谈js和css内联外联注意事项
Jun 30 Javascript
JS快速实现移动端拼图游戏
Sep 05 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
详解小程序循环require之坑
Mar 08 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 Javascript
深入分析node.js的异步API和其局限性
Sep 05 #Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 #Javascript
JS锚点的设置与使用方法
Sep 05 #Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 #Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
Sep 05 #Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 #Javascript
Vue.js每天必学之计算属性computed与$watch
Sep 05 #Javascript
You might like
SSI指令
2006/11/25 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
最基础的Python的socket编程入门教程
2015/04/23 Python
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
Python解惑之整数比较详解
2017/04/24 Python
浅析使用Python操作文件
2017/07/31 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python画双y轴图像的示例代码
2019/07/07 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
EJB timer的种类
2014/10/28 面试题
物流专业毕业生推荐信范文
2013/11/18 职场文书
夫妻吵架保证书
2015/05/08 职场文书
化工生产实习心得体会
2016/01/22 职场文书