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 相关文章推荐
arguments对象
Nov 20 Javascript
javascript 对象比较实现代码
Apr 27 Javascript
javascript getElementsByClassName实现代码
Oct 11 Javascript
JS delegate与live浅析
Dec 21 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
Jan 22 Javascript
使用Vue构建可重用的分页组件
Mar 26 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
VUE前后端学习tab写法实例
Aug 06 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 Javascript
解决vue 子组件修改父组件传来的props值报错问题
Nov 09 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 随机生成10位字符代码
2009/03/26 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
Python如何将字符串转换为日期
2020/07/31 Python
美国轮胎网站:Priority Tire
2018/11/28 全球购物
保安的辞职报告怎么写
2014/01/20 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
优秀家长事迹材料
2014/05/17 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
西安大雁塔导游词
2015/02/10 职场文书
安全员岗位职责
2015/02/10 职场文书
业务内勤岗位职责
2015/04/13 职场文书
暂住证明怎么写
2015/06/19 职场文书