v-model的实现原理

我们在平时使用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属性值。

猜你喜欢

转载自blog.csdn.net/weixin_57959921/article/details/129422549
今日推荐