vue.js指令v-model使用方法

发布时间 - 2026-01-11 00:15:37    点击率:

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实例内容也会随之改变,而如果你在代码中改变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">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue.js  # 指令  # v-model  # 在vue自定义组件中使用 v-model指令详情  # 浅谈 Vue v-model指令的实现原理  # vue.js 实现v-model与{{}}指令方法  # Vue常用指令V-model用法  # vue双向数据绑定指令v-model的用法  # Vue.js中v-model指令的用法介绍  # Vue中指令v-model的原理及使用方法  # 表单  # 绑定  # 也会  # 这是  # 几个  # 多个  # 你在  # 当你  # 一大  # 我们可以  # 便可  # 做一个  # 可选  # 当我们  # 则可  # 用在  # 你会发现  # 如何使用  # 大家多多  # 不直接 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何正确下载安装西数主机建站助手?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何为不同团队 ID 动态生成多个“认领值班”按钮  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何使用Eloquent进行子查询  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  canvas 画布在主流浏览器中的尺寸限制详细介绍  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何打造高效商业网站?建站目的决定转化率  如何快速启动建站代理加盟业务?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何快速搭建FTP站点实现文件共享?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何实现建站之星域名转发设置?  如何在万网自助建站中设置域名及备案?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel如何使用.env文件管理环境变量?(最佳实践)  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  javascript中闭包概念与用法深入理解  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  利用vue写todolist单页应用  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Firefox Developer Edition开发者版本入口  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何快速搭建虚拟主机网站?新手必看指南  佛山企业网站制作公司有哪些,沟通100网上服务官网?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  JS中对数组元素进行增删改移的方法总结  详解Oracle修改字段类型方法总结  Python文本处理实践_日志清洗解析【指导】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  深入理解Android中的xmlns:tools属性  香港服务器WordPress建站指南:SEO优化与高效部署策略  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  BootStrap整体框架之基础布局组件  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】