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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
JavaScript中的View-Model使用介绍
Aug 11 Javascript
javascript alert乱码的解决方法
Nov 05 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
Vue.js 单页面多路由区域操作的实例详解
Jul 17 Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
Sep 17 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
Sep 23 Javascript
JavaScript Array.flat()函数用法解析
Sep 02 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
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python中如何使用虚拟环境
2020/10/14 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
小学信息技术教学反思
2014/02/10 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
违纪检讨书范文
2015/01/27 职场文书
检举信的写法
2019/04/10 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript