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 相关文章推荐
由prototype_1.3.1进入javascript殿堂-类的初探
Nov 06 Javascript
asp 的 分词实现代码
May 24 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
Sep 01 Javascript
ie下$.getJSON出现问题的解决方法
Feb 12 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
Feb 16 Javascript
jQuery实现提示密码强度的代码
Jul 15 Javascript
Vue.js快速入门教程
Sep 07 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
Node.js中流(stream)的使用方法示例
Jul 16 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
Vue filter 过滤当前时间 实现实时更新效果
Dec 20 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
Jul 09 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
关于PHP5 Session生命周期介绍
2010/03/02 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python自定义一个异常类的方法
2019/06/27 Python
Python如何实现邮件功能
2020/05/27 Python
详解Python多线程下的list
2020/07/03 Python
python批量修改交换机密码的示例
2020/09/22 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
大学生自荐书范文
2013/12/10 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
街道务虚会发言材料
2014/10/20 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
主婚人致辞精选
2015/07/28 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
Python的这些库,你知道多少?
2021/06/09 Python
Python中glob库实现文件名的匹配
2021/06/18 Python