1. 前言

本小节我们将介绍 Vue 中数据的双向绑定指令 v-model。v-model 的学习相对简单
我们可以用 v-model 指令在表单 、 及 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

2. 解释

用 v-model 指令在表单 、 及 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。— 官方定义

v-model 是 vue 提供的用来对表单控件做数据双向绑定的指令。它可以根据用户的输入动态改变其绑定的值,同样可以根据绑定值的改变来操作页面 DOM 的更新。

3. 基本用法

接下来我们将详细介绍 v-model 在不同表单元素上的使用。

3.1 单行文本 input

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title></head><body><div id="app"><input v-model="name" placeholder="请输入商品名称"/><p>名称是: {{ name }}</p></div></body><script src="https://unpkg.com/vue/dist/vue.js"></script><script>var vm = new Vue({el: '#app',data: {name: ''},})</script>
</html>

代码解释:
上述代码,我们通过 v-model 给输入框 input 和 name 形成双向绑定,当 input 中数据发生改变时 name 也会发生改变。同理,我们在控制台通过 vm.name = “” 给 name 赋值时输入框的内容也会发生改变。

3.2 多行文本 textarea

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div id="app"><textarea v-model="desc" placeholder="请输入商品描述"></textarea><p>描述是: {{ desc }}</p></div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>var vm = new Vue({el: '#app',data: {desc: ''},
})</script>
</html>

代码解释:
上述代码,我们通过 v-model 给输入框 textarea 和 desc 形成双向绑定,当 textarea 中数据发生改变时 desc 也会发生改变。同理,我们在控制台通过 vm.desc = “” 给 desc 赋值时输入框的内容也会发生改变。

3.3 单个复选框

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div id="app"> <div><input type="checkbox" id="delivery" v-model="isDelivery"><label for="delivery">{{ isDelivery }}</label><span>选项: {{ isDelivery }}</span></div></div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>var vm = new Vue({el: '#app',data: {isDelivery: false},
})</script>
</html>

代码解释:
上述代码,我们通过 v-model 给单个选择框 checkbox 和 isDelivery 形成双向绑定,当 checkbox 改变选中状态时 isDelivery 也会发生改变。同理,我们在控制台通过 vm.isDelivery = true 给 isDelivery 赋值时 checkbox 的选中状态也会发生改变。

3.4 多个复选框

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div id="app"> <div><input type="checkbox" id="food" value="食品" v-model="types"><label for="food">食品</label><input type="checkbox" id="book" value="图书" v-model="types"><label for="book">图书</label><input type="checkbox" id="clothes" value="衣服" v-model="types"><label for="clothes">衣服</label><br><span>类型: {{ types }}</span></div></div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>var vm = new Vue({el: '#app',data: {types: []},
})</script>
</html>

代码解释:
上述代码,我们通过 v-model 给多个选择框 checkbox 和 types 形成双向绑定,当任意 checkbox 改变选中状态时 types 也会发生改变。同理,我们在控制台通过 vm.types = [] 给 types 赋值时对应 checkbox 的选中状态也会发生改变。

3.5 单选按钮

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div id="app"> <div><input type="radio" id="yes" value="1" v-model="isFree"><label for="one">是</label><input type="radio" id="no" value="0" v-model="isFree"><label for="no">否</label><br><span>选择: {{ isFree }}</span></div></div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>var vm = new Vue({el: '#app',data: {isFree: ''},
})</script>
</html>

代码解释:
上述代码,我们通过 v-model 给单选按钮 radio 和 isFree 形成双向绑定,当 radio 改变选中状态时 isFree 也会发生改变。同理,我们在控制台通过 vm.isFree = 0 给 isFree 赋值时 radio 的选中状态也会发生改变。

3.6 下拉选择框

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div id="app"> <div><select v-model="company"><option value="">请选择</option><option>顺丰</option><option>中通</option><option>圆通</option></select><span>选项: {{ company }}</span></div></div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>var vm = new Vue({el: '#app',data: {company: ''},
})</script>
</html>

代码解释:
上述代码,我们通过 v-model 给选择框 select 和 company 形成双向绑定,当 select 改变选项时 company 也会发生改变。同理,我们在控制台通过 vm.company = 0 给 company 赋值时 select 的选中项也会发生改变。

4. 值绑定

对于单选按钮、复选框及选择框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值):

<!-- 当选中时,`picked` 为字符串 "abc" -->
<input type="radio" v-model="picked" value="abc"><!-- `toggle` 为 true 或 false -->
<input type="checkbox" v-model="toggle"><!-- 当选中第一个选项时,`selected` 为字符串 "001" -->
<select v-model="selected"><option value="001">顺丰</option><option value="002">圆通</option>
</select>

但是有时我们可能想把值绑定到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。

4.1 复选框绑定值

<input type="checkbox" id="delivery" v-model="isDelivery" true-value="yes" false-value="no">

代码解释:
上述代码中,我们通过 true-value 和 false-value 给 复选框指定来选中和非选中的值,当选中时 vm.isDelivery === ‘yes’,当没有选中时 vm.isDelivery === ‘no’

4.2 单选按钮绑定值

<input type="radio" v-model="pick" v-bind:value="a">
// 当选中时
vm.pick === vm.a

代码解释:
上述代码中,我们通过 v-bind:value 给 randio 指定选中的值,当 radio 选中时 vm.pick === vm.a。

4.3 选择框选项绑定值

<select v-model="selected"><option v-bind:value="{ number: 123 }">123</option>
</select>

代码解释:
上述代码中,我们通过 v-bind:value 给 option 指定 value 值,当 该 option 选中时 vm.selected 的值为 { number: 123 }。

5. 修饰符

5.1 .lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

5.2 .number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

<input v-model.number="age" type="number">

5.3 .trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg">

6. 小结

本小节我们介绍来 Vue 数据双向绑定 v-model 的使用,主要包括以下知识点:

  • 使用 v-model 对 input、textarea、select 等表单项进行数据绑定
  • 使用 v-bind:value 给表单项的值进行绑定
  • v-model 修饰符的使用。

Vue 数据双向绑定相关推荐

  1. 小猿圈解析vue数据双向绑定的缺点

    vue是当今前端很流行的一种框架,但是vue也是有一定的缺陷的,你有过了解吗?下面小猿圈web前端老师就为你解析一下vue数据双向绑定的缺陷,希望对你有所帮助,下面我们一起了解一下吧. 1.vue 实 ...

  2. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分

    最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...

  3. vue数据双向绑定的原理

    vue数据双向绑定的原理 一 复习闭包 1 闭包含义: 当函数嵌套时,内部函数使用了外部函数的变量,就会产生闭包 当函数可以记住并访问自己的作用域时,就会产生闭包 2 闭包注意点 ① 队列里的代码执行 ...

  4. this指向-作用域、作用域链-预解析 变量提升-Vue组件传值 父子 子父 非父子-Vue数据双向绑定原理

    目录 this指向 作用域.作用域链 预解析 变量提升 Vue组件传值 父子 子父 非父子 Vue数据双向绑定原理 1.this指向 函数的this指向 看调用.不看声明 (1)普通函数调用 ①函数名 ...

  5. Vue数据双向绑定原理(vue2向vue3的过渡)

    众所周知,Vue的两大重要概念: 数据驱动 组件系统 接下来我们浅析数据双向绑定的原理 一.vue2 1.认识defineProperty vue2中的双向绑定是基于defineProperty的ge ...

  6. vue数据双向绑定原理

    vue 双向绑定原理 官网–https://cn.vuejs.org/v2/guide/reactivity.html 1.vue双向数据绑定是 通过 数据劫持 并结合 发布-订阅模式 的方法来实现的 ...

  7. Vue数据双向绑定.sync 和v-model

    结论: .sync 和v-model两者的本质都是语法糖, 目的都是实现组件与外部数据的双向绑定. v-model 是 .sync的一种体现..sync 比较灵活;v-model较单一 .sync修饰 ...

  8. 利用Object.defineProperty实现Vue数据双向绑定

    body部分很简单,一个输入框和一个展示的div <div><p>你好,<input id='nickName'></p><div id=&quo ...

  9. 做了五年Android开发,有些话想对大家说…,vue数据双向绑定

    可以说在大公司的这些日子里,让我学习和领悟到了很多非技术方面的能力: 语言表达能力(大公司经常需要在很多人面前发言). 与不同人沟通的能力. 复杂问题的定位和解决能力. 团队协作能力. 帮助(指导)他 ...

最新文章

  1. VSCODE安装必要的插件实现浏览器中打开,以及显示网址
  2. shell特殊符_cut命令 sort_wc_uniq命令tee_tr_split命令 shell特
  3. bash shell实现二进制与十进制数的互转
  4. 该怎么写Angular JS
  5. 卷积(转自wiki百科)
  6. hashCode()、equals()以及compareTo()方法的理解
  7. 网络编程-TCP/IP协议栈-TCP协议
  8. 八皇后问题python_python八皇后问题的解决方法
  9. Android8.1怎么装谷歌,谷歌PixelXL安卓9.0/8.1/8.0/7.X安装面具ROOT方案
  10. ios html 禁止下拉,ios禁止页面下拉
  11. Linux---基础指令
  12. 云服务器装teamviewer
  13. django之创建第11个项目-页面整合
  14. 调用微信的扫一扫功能
  15. 康熙字典收录多少汉字_《康熙字典》一共有多少个字
  16. [学习笔记-SLAM篇]视觉SLAM十四讲ch3
  17. 快速学习JasperReport-数据填充
  18. 手机点击出现蓝色区域方块
  19. js中Object.defineProperty()方法的解释
  20. 仿QQ和飞秋并支持语音视频白板屏幕共享的即时聊天软件

热门文章

  1. 手机京东菜单html,jQuery仿京东商城手机端商品分类滑动切换特效
  2. FANSEA泛海微MCU单片机IC方案LED智能紫外(UVC+UVA)消毒灯
  3. php织梦网站如何设置头,织梦dedecms网站的安全设置教程
  4. (绝对防御勒索病毒)装机员 ghost win7 Sp1 64位纯净6月版
  5. php留言本在线制作,Flash+php+mysql简单留言本制作
  6. 基于STM32和ATH20实现OLED显示温湿度
  7. Mockito之使用Answer
  8. 一文盘点NeurIPS'22杰出论文亮点!英伟达AI大佬一句话总结每篇重点,一并看透今年技术趋势...
  9. 知识问答领域方法概述
  10. admin_day2