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 相关文章推荐
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
jQuery实现冻结表格行和列
Apr 29 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
Aug 29 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
Oct 30 Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
chosen实现省市区三级联动
Aug 16 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
Jan 19 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
react MPA 多页配置详解
Oct 18 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
详解JS ES6编码规范
May 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
ThinkPHP路由机制简介
2016/03/23 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
js断点调试经验分享
2017/12/08 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
Python读写Excel文件的实例
2013/11/01 Python
深入解析Python中的线程同步方法
2016/06/14 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
一套VC试题
2015/01/23 面试题
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
小学教师办公室制度
2014/02/03 职场文书
创先争优承诺书范文
2014/03/31 职场文书
学生违反校规检讨书
2014/10/28 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
2014年财务部工作总结
2014/11/11 职场文书
教师考核评语大全
2014/12/31 职场文书
高中教师个人工作总结
2015/02/10 职场文书
公务员政审个人总结
2015/02/12 职场文书
护士工作心得体会
2016/01/25 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书