V3中V-Model和V2的区别

本文详细对比了 Vue2 和 Vue3 中 v-model 的差异,包括默认 prop 和事件名的改变,model 选项与 .sync 修饰符的废弃,支持多个 v-model 的使用,以及自定义 v-model 修饰符的新增。Vue3 中,v-model:propName 代替 .sync,且允许组件使用多个 v-model,增强了组件数据交互的灵活性。
摘要由CSDN通过智能技术生成

 v-model 是 Vue 中使用频率特别高的一个指令,而 Vue3 中的 v-model 有了很大的变化,本文将详细讲述一下 Vue2 和 Vue3 中的 v-model 的区别。
Vue2 中的 v-model
        如果对 Vue2 中的语法很熟悉,这部分可以不看。
        首先来回顾一下 Vue2 中的 v-model,它主要用于表单元素和自定义组件上。v-model本质上是一个语法糖,会对用户的输入做一些特殊处理以达到更新数据,而所谓的处理其实就是给使用的元素默认绑定属性和事件。
        当 v-model 使用在表单元素上时,会根据元素的不同而采用不同的处理:

        当<input type="text">文本 和 <textarea>上使用时,会默认给元素绑定名为 value 的 prop 和名为 input 的事件;
        当<input type="checkbox">复选框 和 <input type="radio">单选框 上使用时,会默认绑定名为 checked 的 prop 和名为 change 的事件;
        当 <select>选择框 上使用时,则绑定名为 value 的 prop 和名为 change 的事件。

        这些是 Vue 默认帮我们处理的,可以直接使用。但是你也会发现一些第三方组件也可以使用 v-model ,比如 Element 中的 Input 组件。这是因为这些组件自己实现了 v-model,原理其实就是上面说到的绑定属性和事件。
        我们可以尝试实现一下 v-model,来开发一个简单的输入组件,就叫 MyInput 吧

<!-- MyInput 组件代码 -->
 
<template>
  <div>
    <input type="text" :value="value" @input="$emit('input',$event.target.value)">
  </div>
</template>
 
<script>
export default {
  props: {
    value: String,  // 默认接收一个名为 value 的 prop
  }
}
</script>

上面代码就实现了组件的 v-model 功能,当在这个组件上使用 v-model 时:

<my-input v-model="msg"></my-input>

其实就等同于:

<my-input :value="msg" @input="msg = $event">

Vue 还提供了 model 选项,用于将属性或事件名称改为其他名称,比如上面的 MyInput 组件,我们改一下

<template>
  <div>
    <input
      type="text"
      :value="title"
      @input="$emit('change', $event.t
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值