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 相关文章推荐
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
javascript 节点遍历函数
Mar 28 Javascript
javascript中的107个基础知识收集整理 推荐
Mar 29 Javascript
基于jquery实现状态限定编辑的代码
Feb 11 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
Feb 01 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
JS 实现 ajax 异步浏览器兼容问题
Jan 21 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
在vue项目实现一个ctrl+f的搜索功能
Feb 28 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 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你的验证码安全码?
2007/01/02 PHP
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
用JS写的一个Ajax库(实例代码)
2016/08/06 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
原材料检验岗位职责
2014/03/15 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
员工考核评语大全
2014/04/26 职场文书
相亲大会策划方案
2014/06/05 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
送给客户微信问候语!
2019/07/04 职场文书