Vue3 v-model中的自动事件绑定

1. 核心规则:固定的命名约定

Vue 规定,只要你在模板中使用了 v-model:xxx,编译器就会强制 去监听一个名为 update:xxx 的事件。

当你写下:

ini 复制代码
<Page v-model:page-num="query.pageNum" />

Vue 编译器在编译阶段(打包代码时)会直接把它机械地替换为:

ruby 复制代码
<Page 
  :page-num="query.pageNum" 
  @update:page-num="query.pageNum = $event" 
/>

所以,v-model 并不是"知道"绑定了事件,而是它自动帮你生成了 @update:page-num 这个事件绑定。

2. 如果子组件不配合会怎样?

既然 v-model 在父组件这边自动生成了 @update:page-num 的监听,那么如果子组件 Page.vue 里没有 写 emit('update:page-num', 新页码),会发生什么?

答案是:什么都不会发生,双向绑定失效。

  • 父组件会一直傻等这个事件,但永远等不到。
  • 子组件内部页码虽然变了,但父组件的 query.pageNum 永远不会更新。

3. 本质:约定大于配置

这就像你们两个人约定好:"只要你举起右手(emit('update:page-num')),我就把手里的苹果给你(query.pageNum = $event)"。

v-model 就是那个帮你自动执行"只要你举手,我就给苹果"动作的机器人。它不需要去"猜"你在干什么,它只认你们事先约定好的动作(update:xxx)。

💡 总结

  • v-model 本身不"知道"任何事件 ,它只是一个语法糖。
  • 它通过固定的命名规则 (v-model:xxx 对应 @update:xxx),在编译时自动帮你把事件绑定写好了。
  • 真正的数据传递,依然依赖于子组件老老实实地调用 emit('update:**', 新值)。

这就是 Vue 框架设计的精妙之处:把繁琐的底层事件绑定隐藏起来,让你用极其简洁的 v-model 就能实现双向同步!

相关推荐
htzyl20611 小时前
前端阶梯——第九章、颜色、文本与背景
前端·css
zhangzeyuaaa11 小时前
Ruby `require` 完全指南:从 `$LOAD_PATH` 到 `require_relative`
服务器·前端·ruby
htzyl20611 小时前
前端阶梯——第八章、CSS入门与选择器
前端·css
猪猪拆迁队11 小时前
跨电脑复制共享-WebRTC 打洞踩坑
前端·后端·go
Amos_Web11 小时前
Rspack 源码解析(十八):Tree Shaking 如何用 SideEffects 重写模块连接
前端·rust·前端框架
百度一下吧11 小时前
前端包管理工具和使用手册
前端
anxiao_m12 小时前
水利数字孪生怎么选?主流可视化渲染平台深度横向测评
大数据·前端·人工智能·图形渲染·云渲染
kill52212 小时前
useRef
前端·javascript·react.js
蓝悦无人机12 小时前
从“摸形状“到“点到线面的距离“——聊聊 SLAM 前端(激光雷达篇)
前端·loam·数据关联·激光slam·点云特征提取·点到线面距离·icp/ndt
flash俊杰13 小时前
工程约束怎么不拖后腿
前端