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 相关文章推荐
js change,propertychange,input事件小议
Dec 20 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
jQuery中outerHeight()方法用法实例
Jan 19 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
Vue封装一个简单轻量的上传文件组件的示例
Mar 21 Javascript
详解webpack模块化管理和打包工具
Apr 21 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
PHP里的单例类写法实例
2015/06/25 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
Python正则表达式使用范例分享
2016/12/04 Python
python写一个md5解密器示例
2018/02/23 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
Python List cmp()知识点总结
2019/02/18 Python
python实现网站微信登录的示例代码
2019/09/18 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
市场营销管理制度
2014/01/29 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
初一学生评语大全
2014/04/24 职场文书
学校读书活动总结
2014/06/30 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
2015年组织部工作总结
2015/04/03 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
导游词之镜泊湖
2019/12/09 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers