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 相关文章推荐
javascript offsetX与layerX区别
Mar 12 Javascript
JQuery最佳实践之精妙的自定义事件
Aug 11 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
JavaScript Split()方法
Dec 18 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
简单学习vue指令directive
Nov 03 Javascript
JS搜狐面试题分析
Dec 16 Javascript
React中ES5与ES6写法的区别总结
Apr 21 Javascript
vue实现简单的MVVM框架
Aug 05 Javascript
微信小程序开发技巧汇总
Jul 15 Javascript
webpack的pitching loader详解
Sep 23 Javascript
一篇文章学会Vue中间件管道
Jun 20 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Django 路由系统URLconf的使用
2018/10/11 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python中base64与xml取值结合问题
2019/12/22 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
Python字符串及文本模式方法详解
2020/09/10 Python
python基于openpyxl生成excel文件
2020/12/23 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
大学生写自荐信的技巧
2014/01/08 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
好媳妇事迹材料
2014/12/24 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Go语言入门exec的基本使用
2022/05/20 Golang