Vue.JS入门教程之处理表单


Posted in Javascript onDecember 01, 2016

本文实例为大家分享了Vue.JS表单处理的相关内容,供大家参考,具体内容如下

基本用法

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title></title>
 <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.12.16/vue.min.js"></script>
</head>
<body>
<form id="demo">
 <!-- text -->
 <p>
  <input type="text" v-model="msg">
  {{msg}}
 </p>
 <!-- checkbox -->
 <p>
  <input type="checkbox" v-model="checked">
  {{checked ? "yes" : "no"}}
 </p>
 <!-- radio buttons -->
 <p>
  <input type="radio" name="picked" value="one" v-model="picked">
  <input type="radio" name="picked" value="two" v-model="picked">
  {{picked}}
 </p>
 <!-- select -->
 <p>
  <select v-model="selected">
   <option>one</option>
   <option>two</option>
  </select>
  {{selected}}
 </p>
 <!-- multiple select -->
 <p>
  <select v-model="multiSelect" multiple>
   <option>one</option>
   <option>two</option>
   <option>three</option>
  </select>
  {{multiSelect}}
 </p>
 <p><pre>data: {{$data | json 2}}</pre></p>
</form>
<script>
 new Vue({
  el: '#demo',
  data: {
   msg  : 'hi!',
   checked : true,
   picked : 'one',
   selected : 'two',
   multiSelect: ['one', 'three']
  }
 });

</script>
</body>
</html>

惰性更新
默认情况下,v-model 会在每个 input 事件之后同步输入的数据。你可以添加一个 lazy 特性,将其改变为在 change 事件之后才进行同步。

<!-- 在 "change" 而不是 "input" 事件触发后进行同步 -->
<input v-model="msg" lazy>

转换为数字
如果你希望将用户的输入自动转换为数字,你可以在 v-model 所在的 input 上添加一个 number 特性。没有试验成功,不知道什么原因

<input v-model="age" number>

绑定表达式
当使用 v-model 在单选框和复选框时,被绑定的值可以是布尔值或字符串:

<!-- toggle 是 true 或 false -->
<input type="checkbox" v-model="toggle">

<!-- 当单选框被选中时 pick 是 "red" -->
<input type="radio" v-model="pick" value="red">

这里有一点小的局限性——有的时候我们想把背后的值绑定到一些别的东西上。你可以按下面这个例子实现:

1.复选框

<input type="checkbox" v-model="toggle" true-exp="a" false-exp="b">
// 被选中时:
vm.toggle === vm.a
// 被取消选中时:
vm.toggle === vm.b

2.单选框

<input type="radio" v-model="pick" exp="a">
// 被选中时:
vm.pick === vm.a

动态select选项
当你需要为一个 <select> 元素动态渲染列表选项时,推荐将 options 特性和 v-model 指令配合使用,这样当选项动态改变时,v-model 会正确地同步:

<select v-model="selected" options="myOptions"></select>

在你的数据里,myOptions 应该是一个指向选项数组的路径或是表达式。
这个可选的数组可以包含简单的数组:

options = ['a', 'b', 'c']

或者可以包含格式如 {text:'', value:''} 的对象。该对象格式允许你设置可选项,让文本展示不同于背后的值:

options = [
 { text: 'A', value: 'a' },
 { text: 'B', value: 'b' }
]

会被渲染成为

<select>
 <option value="a">A</option>
 <option value="b">B</option>
</select>

1.选项组
另外,数组里对象的格式也可以是 {label:'', options:[...]}。这样的数据会被渲染成为一个 <optgroup>:

[
{ label: 'A', options: ['a', 'b']},
{ label: 'B', options: ['c', 'd']}
]
<select>
<optgroup label="A">
 <option value="a">a</option>
 <option value="b">b</option>
</optgroup>
<optgroup label="B">
 <option value="c">c</option>
 <option value="d">d</option>
</optgroup>
</select>

2.选项过滤
你的原始数据很有可能不是这里所要求的格式,因此在动态生成选项时必须进行一些数据转换。为了简化这种转换,options特性支持过滤器。将数据的转换逻辑做成一个可复用的 自定义过滤器 通常来说是个好主意:

Vue.filter('extract', function (value, keyToExtract) {
return value.map(function (item) {
 return item[keyToExtract]
})
})
<select
v-model="selectedUser"
options="users | extract 'name'">
</select>

上述过滤器将像 [{ name: 'Bruce' }, { name: 'Chuck' }] 这样的原始数据转化为 ['Bruce', 'Chuck'],从而符合动态选项的格式要求。

3.静态默认选项
除了动态生成的选项之外,你还可以提供一个静态的默认选项:

<select v-model="selectedUser" options="users">
<option value="">Select a user...</option>
</select>

基于 users 动态生成的选项将会被添加到这个静态选项后面。如果 v-model 的绑定值为除 0 之外的伪值,则会自动选中该默认选项。

输入debounce
在一次输入被同步到模型之前,debounce 特性允许你设置一个每次用户事件后的等待延迟。如果在这个延迟到期之前用户再次输入,则不会立刻触发更新,而是重置延迟的等待时间。当每次更新前你要执行繁重作业时会很有用,例如一个基于 ajax 的自动补全功能。有效的减少重复无用的提交

<input v-model="msg" debounce="500">
注意 debounce 参数并不对用户的输入事件进行 debounce:它只对底层数据的 “写入” 操作起作用。因此当使用 debounce 时,你应该用 vm.$watch() 而不是 v-on 来响应数据变化。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
Jul 31 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
IntersectionObserver API 详解篇
Dec 11 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 jQuery
Vue-Router的使用方法
Sep 05 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
Vue移动端右滑屏幕返回上一页附源码下载
Jun 26 Javascript
JavaScript实现文件下载并重命名代码实例
Dec 12 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
Jul 20 Javascript
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
JavaScript 中for/of,for/in 的详细介绍
Nov 17 Javascript
利用js获取下拉框中所选的值
Dec 01 #Javascript
js微信扫描二维码登录网站技术原理
Dec 01 #Javascript
Bootstrap的class样式小结
Dec 01 #Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
Dec 01 #Javascript
AngularJS中的JSONP实例解析
Dec 01 #Javascript
JavaScript交换两个变量值的七种解决方案
Dec 01 #Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 #Javascript
You might like
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
微信小程序位置授权处理方法
2019/06/13 Javascript
在Django中创建第一个静态视图
2015/07/15 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
关于Python解包知识点总结
2020/05/05 Python
python中get和post有什么区别
2020/06/19 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
业务主管岗位职责范本
2013/12/25 职场文书
合伙购房协议样本
2014/10/06 职场文书
早会开场白台词大全
2015/06/01 职场文书
大学班长竞选稿
2015/11/20 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers