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 输入框数字限制插件
Nov 10 Javascript
JavaScript 变量作用域分析
Jul 04 Javascript
jQuery 无刷新分页实例代码
Nov 12 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
JavaScript实现点击文字切换登录窗口的方法
May 11 Javascript
JavaScript类型系统之正则表达式
Jan 05 Javascript
JS中的二叉树遍历详解
Mar 18 Javascript
JavaScript代码性能优化总结篇
May 15 Javascript
js 截取或者替换字符串中的数字实现方法
Jun 13 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
Feb 23 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
实现一个Vue自定义指令懒加载的方法示例
Jun 04 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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
解析php取整的几种方式
2013/06/25 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
完美解决AJAX跨域问题
2013/11/01 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
利用python获得时间的实例说明
2013/03/25 Python
Python中函数参数调用方式分析
2018/08/09 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
十八届三中全会报告学习材料
2014/02/17 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
财产分割协议书范本
2014/11/03 职场文书
2014年度培训工作总结
2014/11/27 职场文书
出国导师推荐信
2015/03/25 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
庆元旦主持词
2015/07/06 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers