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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
JS图像无缝滚动脚本非常好用
Feb 10 Javascript
详解js图片轮播效果实现原理
Dec 17 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
微信小程序 获取session_key和openid的实例
Aug 17 Javascript
vue中axios解决跨域问题和拦截器的使用方法
Mar 07 Javascript
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
详解在HTTPS 项目中使用百度地图 API
Apr 26 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
深入分析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中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
微信上传视频文件提示(推荐)
2018/11/22 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Python实现基于权重的随机数2种方法
2015/04/28 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
django配置app中的静态文件步骤
2020/03/27 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
python 实现简易的记事本
2020/11/30 Python
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
通用求职信范文模板分享
2013/12/27 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
经营目标管理责任书
2014/07/25 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python