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 相关文章推荐
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
JavaScript如何禁止Backspace键
Dec 02 Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 Javascript
JS中call/apply、arguments、undefined/null方法详解
Feb 15 Javascript
javascript实现计时器的简单方法
Feb 21 Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 Javascript
浅谈Vue.js
Mar 02 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
javascript 跨域问题以及解决办法
Jul 17 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
微信小程序中子页面向父页面传值实例详解
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 allow_url_include的应用和解释
2010/04/22 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
python爬虫常用的模块分析
2014/08/29 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
Django中的Model操作表的实现
2018/07/24 Python
基于Python正确读取资源文件
2020/09/14 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
农村婚礼证婚词
2014/01/10 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
优秀团员事迹材料
2014/12/25 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
宣传稿格式范文
2015/07/23 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js