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 相关文章推荐
jQuery EasyUI API 中文文档 - ProgressBar 进度条
Sep 29 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
Mar 12 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
详解通过JSON数据使用VUE.JS
May 26 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
vue中img src 动态加载本地json的图片路径写法
Apr 25 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 Javascript
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
微信小程序中子页面向父页面传值实例详解
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
php下保存远程图片到本地的办法
2010/08/08 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
javascript操作css属性
2013/12/30 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jqTransform美化表单
2015/10/10 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python中的闭包函数
2018/02/09 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
运动会入场词200字
2014/02/15 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
装修公司管理制度
2015/08/05 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
护士业务学习心得体会
2016/01/25 职场文书
python 模块重载的五种方法
2021/04/24 Python
python实现腾讯滑块验证码识别
2021/04/27 Python