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全局函数使用简单说明
Mar 11 Javascript
jquery获取元素索引值index()示例
Feb 13 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
javascript的BOM
May 03 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
详解AngularJS如何实现跨域请求
Aug 22 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
vue-cli 引入、配置axios的方法
May 08 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP7 其他修改
2021/03/09 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
javascript每日必学之封装
2016/02/23 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
python开发之list操作实例分析
2016/02/22 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
大学生毕业自我鉴定
2013/11/06 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
在职证明书模板
2015/06/15 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS