Vue 表单控件绑定的实现示例


Posted in Javascript onAugust 11, 2017

本文介绍了Vue 表单控件绑定的实现示例,感觉这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

基础用法

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

值绑定

对于单选按钮,勾选框及选择框选项,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 做到。 而且 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:

<input v-model="age" number>

debounce

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

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

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

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

Javascript 相关文章推荐
javascript应用:Iframe自适应其加载的内容高度
Apr 10 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
Mar 22 Javascript
jQuery中bind()方法用法实例
Jan 19 Javascript
JavaScript中的包装对象介绍
Jan 27 Javascript
js插件Jcrop自定义截取图片功能
Oct 14 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
Javascript 链式作用域详细介绍
Feb 23 Javascript
Angular2安装angular-cli
May 21 Javascript
微信小程序之事件交互操作实例分析
Dec 03 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 Javascript
原生JavaScript实现留言板
Jan 10 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 #Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 #Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 #Javascript
JSON对象转化为字符串详解
Aug 11 #Javascript
JS中Swiper的使用和轮播图效果
Aug 11 #Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 #Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 #Javascript
You might like
使用PHP获取网络文件的实现代码
2010/01/01 PHP
php 删除cookie方法详解
2014/12/01 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python实现定制交互式命令行的方法
2014/07/03 Python
Python入门篇之列表和元组
2014/10/17 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Python处理PDF与CDF实例
2020/02/26 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python如何实现线程间通信
2020/07/30 Python
selenium如何定位span元素的实现
2021/01/13 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
医院总经理职责
2013/12/26 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
带病坚持工作事迹
2014/05/03 职场文书
个人作风建设自查报告
2014/10/22 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
芙蓉镇观后感
2015/06/10 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书