vue.js指令v-model使用方法


Posted in Javascript onMarch 20, 2017

vue.js的一大功能便是实现数据的双向绑定,本文就表单处理时运用v-model指令实现双向绑定做一个介绍:

v-model这个指令只能用在<input>, <select>,<textarea>这些表单元素上,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无论谁被改变,另一方也会相应的更新为相同的数据。这是通过设置属性访问器实现的。例如:

var data = {
 name: "erik",
 getName: function() {
  return this.name;
 },
 setName: function(name) {
  this.name = name;
 }
};

上面的代码中我们通过getName()和setName()方法作为访问器,我们可以进一步严格限制(如借助Object.defineProperty方法)不直接访问name这个属性,所有对data.name的读写都必须通过data.getName()和data.setName()方法。此时我们改写访问器方法,添加对属性值改变得到监控,便可以实现数据的双向绑定。

那么在表单处理中我们具体如何使用v-model呢,先看看官方文档给出的例子:

<form id="demo">
 <!-- text -->
 <p>
 <input type="text" v-model="msg">
 {{msg}}
 </p>
 <!-- checkbox -->
 <p>
 <input type="checkbox" v-model="checked">
 {{checked ? "yes" : "no"}}
 </p>
 <!-- radio buttons -->
 <p>
 <input type="radio" name="picked" value="one" v-model="picked">
 <input type="radio" name="picked" value="two" v-model="picked">
 {{picked}}
 </p>
 <!-- select -->
 <p>
 <select v-model="selected">
  <option>one</option>
  <option>two</option>
 </select>
 {{selected}}
 </p>
 <!-- multiple select -->
 <p>
 <select v-model="multiSelect" multiple>
  <option>one</option>
  <option>two</option>
  <option>three</option>
 </select>
 {{multiSelect}}
 </p>
 <p><pre>data: {{$data | json 2}}</pre></p>
</form>

对应的js:

new Vue({
 el: '#demo',
 data: {
 msg  : 'hi!',
 checked : true,
 picked : 'one',
 selected : 'two',
 multiSelect: ['one', 'three']
 }
})

效果如下:

vue.js指令v-model使用方法

小伙伴们可以尝试一下写出这个页面,在浏览器中当你调整上面表单元素的选中值时,你会发现下面打印的vue实例内容也会随之改变,而如果你在代码中改变vue实例data内容时渲染出来的表单选中值也会随之改变。

另外,v-model这个指令还有几个可选的参数:lazy,number,options,debounce

1.使用lazy参数是将双向数据同步的时间节点从input触发改为了change触发,调用方式如下:

<!-- synced after "change" instead of "input" -->
<input v-model="msg" lazy>

2.使用number参数是通知v-model绑定的dom元素把用户输入值默认当成数字来处理,调用如下:

<input v-model="age" number>
 

3.使用options参数是用于渲染一个select项的列表,调用方式如下:

<select v-model="selected" options="myOptions"></select>

其中options的参数名指向一个数组,该数组可以包括字符串或对象,对象可以是{text:'', value:''}的形式,指定了<option>的value属性与text内容,例如:

[
 { text: 'A', value: 'a' },
 { text: 'B', value: 'b' }
]

将渲染出:

<select>
 <option value="a">A</option>
 <option value="b">B</option>
</select>

如果对象是{ label:'', options:[...] }的形式,则可以渲染出多个option组<optgroup>,如下例:

[
 { label: 'A', options: ['a', 'b']},
 { label: 'B', options: ['c', 'd']}
]

将渲染出:

<select>
 <optgroup label="A">
 <option value="a">a</option>
 <option value="b">b</option>
 </optgroup>
 <optgroup label="B">
 <option value="c">c</option>
 <option value="d">d</option>
 </optgroup>
</select>

4.使用debounce参数是指定一个延迟时间,延迟从按键触发到数据更新同步之间的时间,当我们的更新操作比较耗时时这个属性十分有用,例如搜索引擎在我们键入字符时发送ajax请求完成自动补全提示,调用如下:

<input v-model="msg" debounce="500">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
如何实现浏览器上的右键菜单
Jul 10 Javascript
CSS+JS构建的图片查看器
Jul 22 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
jQuery中toggleClass()方法用法实例
Jan 05 Javascript
jquery验证手机号是否正确实例讲解
Nov 17 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
May 05 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
js时间查询插件使用详解
Apr 07 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
js Dom实现换肤效果
Oct 21 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
微信小程序中子页面向父页面传值实例详解
Mar 20 #Javascript
JS查找英文文章中出现频率最高的单词
Mar 20 #Javascript
vue.js中指令Directives详解
Mar 20 #Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 #Javascript
windows下vue.js开发环境搭建教程
Mar 20 #Javascript
js中DOM三级列表(代码分享)
Mar 20 #Javascript
深入对Vue.js $watch方法的理解
Mar 20 #Javascript
You might like
3种平台下安装php4经验点滴
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
Views rows style模板重写代码
2011/05/16 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
php-fpm配置详解
2014/02/12 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
深入探讨前端框架react
2015/12/09 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
python执行等待程序直到第二天零点的方法
2015/04/23 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
质量保证书范本
2014/04/29 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
普通话演讲稿
2014/09/03 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
小学班级口号大全
2015/12/25 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
使用Redis实现分布式锁的方法
2022/06/16 Redis
mysql sock 文件解析及作用讲解
2022/07/15 MySQL