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 相关文章推荐
利用javascript中的call实现继承
Jan 22 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
Aug 29 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
Sep 02 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
Position属性之relative用法
Dec 14 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
angular基于ng-alain定义自己的select组件示例
Feb 23 Javascript
node.js自动上传ftp的脚本分享
Jun 16 Javascript
Vue.js 中的 v-show 指令及用法详解
Nov 19 Javascript
每周一练 之 数据结构与算法(Stack)
Apr 16 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
浅析Yii2缓存的使用
2016/05/10 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
法人代表委托书
2014/04/04 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
学校开学标语
2014/10/06 职场文书
教师个人培训总结
2015/02/11 职场文书
出国留学自荐信模板
2015/03/06 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
浅析Python中的随机采样和概率分布
2021/12/06 Python