我们在平时使用vue做开发时,v-model是我们经常用到的属性,我们日常中对v-model的理解就是双向绑定,但是对其背后的原理没有彻底搞清楚,所以我们需要深入理解v-model背后的原理。
1.v-model是什么,为什么要使用v-model?
v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。 v-model作为双向绑定指令也是vue两大核心功能之一,使用非常方便,提高前端开发效率。 在view层,model层相互需要数据交互,即可使用v-model。
2.v-model的基本使用
v-model主要提供了两个功能,就是输入框的value改变,它所对应的message对象值也会改变;修改message的值,input的value也会随之改变。无论改变那个值,另外一个值都会变化。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<input type="text" v-model="message">{
{无敌大铁锤}}
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "无敌大铁锤"
}
})
</script>
</body>
</html>
3.v-model实现原理
(1)基础用法
- v-model 的本质是语法糖,可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它根据控件类型自动选取正确的方法来更新元素。它负责监听用户的输入事件以更新数据,并对一些特殊场景进行一些特殊处理。v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。要通过 JavaScript 在组件的 data 选项中声明初始值。
v-model
在内部为不同的输入元素使用不同的属性并抛出不同的事件:- <1> text 和 textarea 元素使用
value
属性和input
事件;- <2> checkbox 和 radio 使用
checked
属性和change
事件;- <3> select 字段将
value
作为 prop 并将change
作为事件;
(2)实现
- v-bind:绑定响应式数据
- 触发oninput 事件并传递数据
就像这样:
<input v-model="无敌大铁锤">
等同于:
<input
v-bind:value="无敌大铁锤"
v-on:input="无敌大铁锤 = $event.target.value"
>
4.总结
- modal层通过defineProperty来劫持每个属性,一旦监听到变化通过相关的页面元素更新;
- 通过编译模板文件,为控件的v-model绑定input事件,从而页面输入能实时更新相关data属性值。