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

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.dtcms.com/a/349788.html

相关文章:

  • 设计模式:原型模式(Prototype Pattern)
  • 使用 HandlerMethodReturnValueHandler 在SpringBoot项目 实现 RESTful API 返回值自动封装,简化开发
  • 数据结构青铜到王者第三话---ArrayList与顺序表(2)
  • 零知开源——基于STM32F103RBT6和ADXL335实现SG90舵机姿态控制系统
  • three.js+WebGL踩坑经验合集(9.1):polygonOffsetUnits工作原理大揭秘
  • 【数据结构】LeetCode160.相交链表 138.随即链表复制 牛客——链表回文问题
  • [SC]SystemC动态进程概述及案例
  • LinkedIn 自动消息发送工具
  • 网络编程——TCP、UDP
  • 人工智能(AI)与网络安全
  • 【Linux】协议的本质
  • 一键脚本:自动安装 Nginx + Certbot + HTTPS(Let‘s Encrypt)
  • QT-QSS样式表
  • 面试:计算机网络
  • 《输赢》电视剧总结学习
  • 数据结构:红黑树(Red-Black Tree)
  • 电商秒杀场景下,深挖JVM内存泄漏与多线程死锁的解决方案
  • Python3.14安装包下载与保姆级图文安装教程!!
  • PyTorch实战(1)——深度学习概述
  • 【动态规划】309. 买卖股票的最佳时机含冷冻期及动态规划模板
  • webpack文件指纹:hash、chunkhash与contenthash详解
  • 基于 OpenCV 与 Mediapipe 的二头肌弯举追踪器构建指南:从环境搭建到实时计数的完整实现
  • 【CV】图像基本操作——①图像的IO操作
  • 系统架构设计师-计算机系统存储管理-页式、段氏、段页式模拟题
  • [系统架构设计师]专业英语(二十二)
  • Python爬虫第四课:selenium自动化
  • Qwt7.0-打造更美观高效的Qt开源绘图控件库
  • macbook国内源安装rust
  • leetcode LCR 012.寻找数组的中心下标
  • 如何在 Jenkins 中安装 Master 和 Slave 节点以优化 CI/CD 流程