当前位置: 首页 > ai >正文

Vue 2 中的 v-model和Vue3中的v-model

你问的是 v-model(不是 v-modal 吧 😄),我来帮你梳理一下 Vue2 和 Vue3 的 v-model 区别


🔹 Vue 2 中的 v-model

  1. 语法

    <input v-model="msg">
    
    • v-model 本质上是 语法糖,等价于:

      <input:value="msg"@input="msg = $event.target.value"
      >
      
  2. 在组件中的用法

    • 默认情况下,v-model 会绑定到 value prop,并监听 input 事件

      <!-- 父组件 -->
      <my-input v-model="msg"></my-input><!-- 子组件 -->
      <template><input :value="value" @input="$emit('input', $event.target.value)">
      </template>
      <script>
      export default {props: ['value']
      }
      </script>
      
    • 如果想改 prop 名和事件名,需要用 model 选项

      export default {model: {prop: 'checked',event: 'change'},props: ['checked']
      }
      

      父组件就可以写:

      <my-checkbox v-model="isChecked" />
      

🔹 Vue 3 中的 v-model

  1. 语法

    • 仍然是语法糖,但和 Vue2 不同:

      <input v-model="msg">
      

      等价于:

      <input:modelValue="msg"@update:modelValue="msg = $event"
      >
      
  2. 在组件中的用法

    • 默认 prop 变成了 modelValue,事件名变成了 update:modelValue

      <!-- 父组件 -->
      <my-input v-model="msg"></my-input><!-- 子组件 -->
      <template><input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)">
      </template>
      <script>
      export default {props: ['modelValue']
      }
      </script>
      
  3. v-model 支持

    • Vue3 可以在一个组件上用多个 v-model,通过参数区分:

      <user-name v-model:first-name="first" v-model:last-name="last" />
      

      子组件写法:

      export default {props: ['firstName', 'lastName'],emits: ['update:firstName', 'update:lastName']
      }
      
  4. 修饰符传递

    • Vue2 的修饰符(如 .trim.lazy)只能在内置组件里生效;

    • Vue3 可以让自定义组件接收修饰符:

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

      子组件里通过第二个参数获取:

      export default {props: ['modelValue'],emits: ['update:modelValue'],setup(props, { emit, attrs }) {console.log(attrs['v-model-modifiers']); // { trim: true }}
      }
      

🔑 总结对比

特性Vue2Vue3
默认 propvaluemodelValue
默认事件inputupdate:modelValue
自定义 prop+事件model: { prop, event }直接用 v-model:xxx
多个 v-model❌ 不支持✅ 支持
修饰符传递❌ 不支持(仅限原生表单)✅ 支持传递到子组件

http://www.xdnf.cn/news/18680.html

相关文章:

  • 大数据毕业设计选题推荐-基于大数据的超市销售数据统计分析系统-Hadoop-Spark-数据可视化-BigData
  • 企业在做广告前,需要明确哪些问题?
  • 销售额和营业收入的区别在哪?哪个值应该更大一些?
  • 《零基础入门AI:循环神经网络(Recurrent Neural Networks)(从原理到实现)》
  • Java中的反射机制
  • MyBatis 从入门到精通:一篇就够的实战指南(Java)
  • 3-3〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB应用安全评估工具
  • 火山引擎配置CDN
  • 【Linux | 网络】多路转接IO之poll
  • 计算机网络课堂笔记
  • AutoCAD Electrical缺少驱动程序“AceRedist“解决方法
  • C++ Core Guidelines 核心理念
  • 关于单片机串口通讯的多机操作说明---单片机串口通讯如何实现多机操作?
  • 16-day13强化学习和训练大模型
  • 怎么把iphone文件传输到windows电脑?分场景选方法
  • jasperreports 使用
  • 解锁处暑健康生活
  • 企业级监控可视化系统 Prometheus + Grafana
  • LoRA(低秩适应,Low-Rank Adaptation)的 alpha 参数解析(54)
  • 雷卯针对香橙派Orange 4G-IOT开发板防雷防静电方案
  • kafka 原理详解
  • 【OpenAI】ChatGPT-4o-latest 真正的多模态、长文本模型的详细介绍+API的使用教程!
  • 深入理解 Python Scapy 库:网络安全与协议分析的瑞士军刀
  • ES6/ES2015 - ES16/ES2025
  • 在压力测试中如何确定合适的并发用户数?
  • 挖币与区块链技术有怎样的联系?
  • 基于 Prometheus+Alertmanager+Grafana 打造监控报警后台(一)-Prometheus介绍及安装
  • DMP-Net:面向脑组织术中成像的深度语义先验压缩光谱重建方法|文献速递-深度学习人工智能医疗图像
  • PyTorch实战(1)——深度学习概述
  • 阿里:基于设计逻辑的LLM数据合成