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 相关文章推荐
SWFObject基本用法实例分析
Jul 20 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
js实现每日签到功能
Nov 29 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
微信小程序云开发之模拟后台增删改查
May 16 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
Jul 24 Javascript
js通过canvas生成图片缩略图
Oct 02 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正则提取图片地址
2014/03/27 PHP
php网页病毒清除类
2014/12/08 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
Vue官网todoMVC示例代码
2018/01/29 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
javascript Canvas动态粒子连线
2020/01/01 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
python连接mongodb密码认证实例
2018/10/16 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
党风廉政承诺书
2014/03/27 职场文书
单位工作证明范文
2014/09/14 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
民主生活会剖析材料
2014/09/30 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
2014年科协工作总结
2014/12/09 职场文书
《三国志》赏析
2019/08/27 职场文书