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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
使用IE6看老赵的博客 jQuery初探
Jan 17 Javascript
JavaScript toFixed() 方法
Apr 15 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
Mar 03 Javascript
属于你的jQuery提示框(Tip)插件
Jan 20 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
JavaScript中Math对象的方法介绍
Jan 05 Javascript
用jquery的attr方法实现图片切换效果
Feb 05 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
图解上海144收音机
2021/03/02 无线电
php 保留字列表
2012/10/04 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
详解Webpack4多页应用打包方案
2020/07/16 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
python实现获取Ip归属地等信息
2016/08/27 Python
Python数据结构之翻转链表
2017/02/25 Python
python中join()方法介绍
2018/10/11 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python删除某个目录文件夹的方法
2020/05/26 Python
Python新手如何理解循环加载模块
2020/05/29 Python
python字典按照value排序方法
2020/12/28 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
单位刻章介绍信范文
2014/01/11 职场文书
市场营销调查计划书
2014/05/02 职场文书
计算机实训报告总结
2014/11/05 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript