Vue中的双向数据绑定v-model的实现原理

本文详细解析了Vue.js中v-model指令的工作原理,揭示其如何实现数据的双向绑定。通过模拟原生DOM的oninput事件,展示了如何在不使用v-model的情况下手动实现这一功能。此外,还介绍了在组件间如何利用v-model进行父子通信,以达到数据的双向同步。通过实例,解释了如何在父组件和子组件中分别处理v-model,从而理解Vue.js的数据绑定机制。
摘要由CSDN通过智能技术生成
💂 个人网站: 【紫陌】【笔记分享网】
💅 想寻找共同学习交流、共同成长的伙伴, 请点击【前端学习交流群】

数据双向绑定?

      Vue中使用v-model可以实现表单元素和数据之间的双向绑定,即修改表单的值,data中对应变量的值也会被修改。在data对应变量中修改值,被绑定的表单值也会被修改;所以称之为双向绑定。但是为什么这个指令就可以实现数据的双向绑定呢?其实v-model是vue的一个语法糖。即利用v-model绑定数据后,既绑定了数据,又添加了一个input事件监听。

实现原理:

  • v-bind绑定响应数据
  • 触发input事件并传递数据

模拟一个表单的v-model

 <!-- 原生DOM当中是有oninput事件:当表单元素发生文本的变化的时候就会立即触发 -->
<input type="text":value="msg" @input="msg = $event.target.value">
<span>{{msg}}</span>

<!-- 等同于下面 -->
<input type="text" v-model="msg">



<script type="text/ecmascript-6">
  export default {
    data() {
      return {
         msg:"我爱紫陌"
      }
    },
  }
</script>

原生DOM当中是有oninput事件,他经常是结合表单元素一起使用,当表单元素文本内容发生变化的时候就会发出一次回调

Vue2:可以通过value和input事件实现v-model功能

深入学习v-model:实现父子组件数据同步

模拟一个组件上的v-model

组件上使用v-model可以实现父子通信

父组件:

<template>
<div>
<!-- :value这可是props,父子组件通信
     @input这可不是原生DOM的input事件,这里属于自定义事件
 -->
<CustomInput :value="msg" oninput="msg = $event"></CustomInput> 
 <!-- 等同于下面 -->
<CustomInput v-model="msg"></CustomInput>
    <hr>
    <input type="text" :value="msg" @input="msg = $event.target.value">
  </div> 
</template>

<script type="text/ecmascript-6">
  import CustomInput from './CustomInput.vue'
  export default {
    data() {
      return {
         msg:"我爱紫陌"
      }
    },
    components: {
      CustomInput
    }
  }
</script>

子组件:

<template>
  <div>
    <h2>{{value}}</h2>
    <input :value="value"  @input="$emit('input',$event.target.value)"/>
  </div>
</template>

<script type="text/ecmascript-6">
  export default {
    name: 'CustomInput',
    props:['value']
  }
</script>

这样的话就可以在父组件改msg数据子组件也会跟着改数据,反而言之,子组件input数据也影响父组件数据,实现父子组件数据双向绑定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值