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 就能实现双向同步!

相关推荐
@大迁世界9 小时前
Firefox 本地模式:localhost 再见了 ?
前端·架构
米米商聊11 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
echome88812 小时前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
时间的情敌12 小时前
OpenLayers 实战|Vue3 + OpenLayers 完整工程案例(加载天地图、要素、弹窗、绘制、WFS)
前端·openlayers
陈随易12 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
前端的日常13 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
计算机魔术师13 小时前
谷歌搜索广告踩刹车,AI广告成为救命稻草
前端
总要学点什么13 小时前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
IT_陈寒13 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端
hunter_07613 小时前
一次 iOS 真机签名 409 的完整排查:证书、设备、描述文件为什么总是"对不上"
前端