Vue.js每天必学之表单控件绑定


Posted in Javascript onSeptember 05, 2016

基础用法

可以用 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' }
 ]
 }
})

绑定 value

对于单选按钮,勾选框及选择框选项,v-model 绑定的 value 通常是静态字符串(对于勾选框是逻辑值):

<!-- 当选中时,`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>

但是有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 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 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个特性 number:

<input v-model="age" number>

debounce

debounce 设置一个最小的延时,在每次敲击之后延时同步输入框的值与数据。如果每次更新都要进行高耗操作(例如在输入提示中 Ajax 请求),它较为有用。

<input v-model="msg" debounce="500">

注意 debounce 参数不会延迟 input 事件:它延迟“写入”底层数据。因此在使用 debounce 时应当用 vm.$watch() 响应数据的变化。若想延迟DOM 事件,应当使用 debounce 过滤器。

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

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

Javascript 相关文章推荐
jquery.ui.progressbar 中文文档
Nov 26 Javascript
Javascript 二维数组
Nov 26 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
手机平板等移动端适配跳转URL的js代码
Jan 25 Javascript
使用JS+plupload直接批量上传图片到又拍云
Dec 01 Javascript
做web开发 先学JavaScript
Dec 12 Javascript
浅谈javascript中的instanceof和typeof
Feb 27 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
原型和原型链 prototype和proto的区别详情
Nov 02 Javascript
深入分析node.js的异步API和其局限性
Sep 05 #Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 #Javascript
JS锚点的设置与使用方法
Sep 05 #Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 #Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
Sep 05 #Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 #Javascript
Vue.js每天必学之计算属性computed与$watch
Sep 05 #Javascript
You might like
制作美丽的拉花
2021/03/03 冲泡冲煮
用PHP生成静态HTML速度快类库
2007/03/18 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
js实现转动骰子模型
2019/10/24 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
高中军训广播稿
2014/01/14 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
应届大学生自荐书
2014/06/17 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
员工安全责任协议书
2016/03/22 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
vue ref如何获取子组件属性值
2022/03/31 Vue.js