☰
Vue 组件基础实战:小白也能看懂的 Props、Emit、v-model 与插槽保姆级教程
2026/10/1 19:49:30 网站建设 项目流程

文章目录

    • 一、先搞懂:组件通信到底是个啥?
    • 二、Props:老爸给儿子零花钱(父传子,单向向下)
    • 三、Emit:儿子向老爸汇报(子传父,事件通知)
    • 四、v-model:父子俩的“对讲机”(双向绑定)
    • 五、Slots:给组件留个“坑位”(内容分发)
    • 七、总结

一、先搞懂:组件通信到底是个啥?

你可以把 Vue 组件想象成老板(父组件)和员工(子组件)。

  • 老板要把任务交代下去(传数据)。
  • 员工做完任务要把结果汇报上来(传事件)。
  • 如果员工要请示老板,老板同意了再干(双向绑定)。
  • 老板觉得办公室缺个喝茶的地方,让员工在某个位置预留个空间(插槽)。

二、Props:老爸给儿子零花钱(父传子,单向向下)

核心原则:单向数据流,只能读,不能改!

💡 通俗解释:

父组件给子组件传数据,就像老爸给孩子零花钱。钱一旦交到孩子手里,孩子只能花,却不能偷偷改动“钱的面额”——也就是说,子组件不能直接修改 Props。如果孩子想多要点零花钱,必须告诉老爸,由老爸重新给。

📝 代码演示:

子组件UserInfo.vue(接收方)

父组件App.vue(发送方)

三、Emit:儿子向老爸汇报(子传父,事件通知)

核心原则:子组件只负责通知“发生了什么”,父组件来决定怎么处理。

💡 通俗解释:

子组件不能直接改 Props,那遇到“点击按钮加1”这种需要修改数据的场景怎么办?用 Emit 抛出一个事件,喊一声:“老爸,加1了!”老爸(父组件)听到后,自己把数据改掉。

📝 代码演示:

子组件Counter.vue

父组件App.vue(发送方)

页面显示计数值同步变化

四、v-model:父子俩的“对讲机”(双向绑定)

核心原则:v-model 只是一个语法糖,本质还是 Props + Emit。

💡 通俗解释:

每次写 :modelValue和@update:modelValue太累了,Vue 直接给你一个v-model,相当于一个对讲机,父子俩能同步通话。

📝 代码演示:

子组件CustomInput.vue

父组件App.vue(发送方)

五、Slots:给组件留个“坑位”(内容分发)

核心原则:Props 传数据,Slots 传结构(HTML 模板)。

💡 通俗解释:

你买了一个精装修的房子(子组件),但客厅的墙你想自己贴画(自定义内容)。这时候,子组件就可以在墙上留个<slot></slot>,父组件想放什么就放什么。

📝 代码演示:

子组件CardBox.vueBox.vue

父组件App.vue(发送方)
## 六、进阶:如果组件层级深了怎么办?(痛点与方案)

在写代码时我发现,如果组件是 A -> B -> C -> D,D 需要 A 的数据,用 Props 一层层传会非常繁琐(这叫“属性透传”)。

这时候就需要升级方案了:

  • Provide / Inject(跨层级注入):就像是老板在办公室放了一个公共文件柜,不管隔了多少层,员工(后代组件)都可以直接去拿。
  • Pinia(全局状态管理):就像是公司的云盘,任何部门(跨页面、跨组件)都可以登录访问同一份数据。

选型口诀:父子直连用 Props/Emit,跨层级用 Provide/Inject,跨页面用 Pinia。

七、总结

把这张图记在脑子里,组件通信就不难了:

通信方式方向生活中的比喻
Props父 → 子老爸给儿子零花钱(只能花,不能改)
Emit子 → 父儿子向老爸汇报情况
v-model双向父子打电话(Props + Emit 的语法糖)
Slots父 → 子(结构)房子留个坑位,你自己装修
希望这篇文章对刚学 Vue 的你有所帮助!如果觉得有用,点个赞再走吧

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询