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 相关文章推荐
一实用的实现table排序的Javascript类库
Sep 12 Javascript
js自定义事件代码说明
Jan 31 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
Aug 21 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
ES6中Symbol类型用法实例详解
Apr 06 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
vue的基本用法与常见指令
Aug 15 Javascript
Vue编写多地区选择组件
Aug 21 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
php类
2006/11/27 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
JavaScript触发器详解
2007/03/10 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
python 文件查找及内容匹配方法
2018/10/25 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
pandas计数 value_counts()的使用
2019/06/24 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python 如何查找特定类型文件
2020/08/17 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
init进程的作用
2015/08/20 面试题
自我评价优秀范文分享
2013/11/30 职场文书
诚信考试承诺书
2014/03/27 职场文书
公司租房协议书范本
2014/10/08 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
死亡赔偿协议书
2015/01/28 职场文书
秋收起义观后感
2015/06/11 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书