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 相关文章推荐
用JS实现的一个include函数
Jul 21 Javascript
jquery 插件开发 extjs中的extend用法小结
Jan 04 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
JavaScript事件委托用法分析
Jan 24 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
vue :src 文件路径错误问题的解决方法
May 15 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
jQuery textarea的长度进行验证
2009/05/06 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中的groupby分组功能的实例代码
2018/07/11 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python实现邮件发送功能
2019/08/10 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
python excel转换csv代码实例
2019/08/26 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
python requests.get带header
2020/05/05 Python
酒店七夕情人节活动策划方案
2014/08/24 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
感恩教师节主题班会
2015/08/12 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL