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 相关文章推荐
setTimeout 不断吐食CPU的问题分析
Apr 01 Javascript
点击进行复制的JS代码实例
Aug 23 Javascript
js写的评论分页(还不错)
Dec 23 Javascript
JQuery以JSON方式提交数据到服务端示例代码
May 05 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
JavaScript实现节点的删除与序号重建实例
Aug 05 Javascript
js ajaxfileupload.js上传报错的解决方法
May 05 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
vue 计时器组件的实现代码
Sep 14 Javascript
Vue学习之常用指令实例详解
Jan 06 Javascript
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
从源码角度来回答keep-alive组件的缓存原理
Jan 18 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
Python实现远程调用MetaSploit的方法
2014/08/22 Python
python任务调度实例分析
2015/05/19 Python
django ajax json的实例代码
2018/05/29 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Python Process多进程实现过程
2019/10/22 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
护士进修自我鉴定
2014/02/07 职场文书
面试必备的求职信
2014/05/25 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
交通事故和解协议书
2014/09/25 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
督导岗位职责范本
2015/04/10 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
深入浅析React中diff算法
2021/05/19 Javascript
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js