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 相关文章推荐
在线游戏大家来找茬II
Sep 30 Javascript
Javascript中的window.event.keyCode使用介绍
Apr 26 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
前端主流框架vue学习笔记第二篇
Jul 26 Javascript
js学习总结之dom2级事件基础知识详解
Jul 27 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
微信小程序canvas实现刮刮乐效果
Jul 09 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
element tree树形组件回显数据问题解决
Aug 14 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
php数据库连接
2006/10/09 PHP
php a simple smtp class
2007/11/26 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
smarty自定义函数用法示例
2016/05/20 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
JavaScript的parseInt 取整使用
2011/05/09 Javascript
JS继承用法实例分析
2015/02/05 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
python通过smpt发送邮件的方法
2015/04/30 Python
python占位符输入方式实例
2019/05/27 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
增大python字体的方法步骤
2020/07/05 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
上海中网科技笔试题
2012/02/19 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
2015年计划生育责任书
2015/05/08 职场文书
海洋天堂观后感
2015/06/05 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript