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 removeChild 使用注意事项
Apr 11 Javascript
JavaScript 语言的递归编程
May 18 Javascript
让ie6也支持websocket采用flash封装实现
Feb 18 Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 Javascript
基于jquery实现瀑布流布局
Jun 28 Javascript
详解JavaScript中基于原型prototype的继承特性
May 05 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
Sep 09 Javascript
js css自定义分页效果
Feb 24 Javascript
Vue2.0 slot分发内容与props验证的方法
Dec 12 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 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中取得文件的后缀名?
2012/02/20 PHP
php遍历数组的方法分享
2012/03/22 PHP
基于php权限分配的实现代码
2013/04/28 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
PHP时间函数使用详解
2019/03/21 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
深入理解vue Render函数
2017/07/19 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
部署Python的框架下的web app的详细教程
2015/04/30 Python
python实现发送邮件及附件功能
2021/03/02 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
手写一个python迭代器过程详解
2019/08/27 Python
事业单位辞职信范文
2014/01/19 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
股票投资建议书
2014/05/19 职场文书
个人授权委托书格式
2014/08/30 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
初中中等生评语
2014/12/29 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP