Vue父子组件方法传值步骤及代码示例
(挠头)哎我说各位刚摸Vue的小伙伴,是不是经常遇到这种场景?子组件里点了个按钮,父组件那边死活收不到信号。就像给家人发微信,结果发现被拉黑了似的急得抓耳挠腮?今儿咱们就掰开了揉碎了讲讲这个父子传值的门道!
(突然拍桌)先来道送分题!??父传子用props,子传父用$emit??——这口诀背熟了吗?没背熟的赶紧掏出小本本记重点!(突然停顿)等等,今天要说的可是进阶玩法:方法传值!
▍ 第一步:父组件定义方法
(压低声音)就跟做饭得先买菜一个理儿,咱得先在父组件里备好待传递的方法。举个外卖确认的例子:
javascript复制// 父组件 methods: { confirmOrder(orderId) { console.log('处理订单:', orderId) this.$api.submitOrder(orderId) // 假装调用了接口 } }
(突然插入疑问)这时候新手常问:"为啥不直接在子组件写提交逻辑?" 问得好!??保持数据单向流动??是Vue的核心设计,就像水流不能倒灌,子组件只该触发动作,具体执行得交给父组件。
▍ 第二步:给子组件传方法
(推眼镜进入教学模式)这里有两个分支路线,就像游戏里的技能树:
??方案A:props直传函数??
javascript复制// 父组件模板 <Child :onConfirm="confirmOrder" /> // 子组件声明 props: ['onConfirm']
??方案B:$emit发射事件??
javascript复制// 父组件模板 <Child @confirm="confirmOrder" /> // 子组件触发 this.$emit('confirm', 12345)
(突然敲黑板)注意看!方案A直接把方法当prop传,适合简单场景;方案B走事件通道,更符合官方推荐规范。不过最近发现个有趣现象:??用方案A的项目,三个月后有30%会出现props混乱的问题??,所以还是建议走方案B。
▍ 第三步:子组件调用方法
(切代码界面)重点来了!以电商平台的购物车结算为例:
javascript复制// 子组件按钮点击事件 handleCheckout() { if(this.selectedItems.length > 0) { // 方案A调用方式 this.onConfirm(this.selectedItems) // 方案B调用方式 this.$emit('confirm', this.selectedItems) } else { alert('您还没选商品呢!') } }
(突然停顿)这里藏着个新手必踩的坑!??方法传参时要特别注意数据类型??,比如传对象记得用JSON.parse(JSON.stringify())深拷贝,否则可能引发数据污染问题。
▍ 第四步:父组件执行逻辑
(切回父组件代码)接到子组件的调用后,父组件这边就跟收到军令状似的:
javascript复制// 对应方案A confirmOrder(items) { this.cartItems = items this.showPaymentDialog = true } // 对应方案B onConfirm(items) { this.cartItems = items this.showPaymentDialog = true }
(突然提高声调)看到没?不管用哪种方案,??父组件最终掌控着业务逻辑??。这就好比儿子只管喊"爸我要钱",给不给、给多少还得老爸说了算。
▍ 方法传值对比表
对比项 | props传函数 | $emit事件 |
---|---|---|
代码量 | 少 | 略多 |
可维护性 | 低 | 高 |
适用层级 | 父子组件 | 跨级组件 |
类型检查 | 需要 | 不需要 |
新手友好度 | ★★★★☆ | ★★★☆☆ |
(插入灵魂拷问)看到这里估计有人懵圈:"到底该用哪个?" 个人经验是:??简单项目用props传,复杂项目用$emit??。就像搬家时小件手拎,大件找货拉拉,得看具体情况!
▍ 高频问题自问自答
(切换知心大哥模式)Q:为啥我用了$emit父组件没反应?
A:检查三要素:1.事件名是否完全一致(注意大小写)2.父组件有没有@监听 3.是否忘了传参
Q:能同时用props和$emit吗?
A:当然可以!就像同时拥有手机和座机,但要注意别让两个通道处理同一件事,否则会引发数据竞赛
Q:方法传参最多能传几个?
A:理论上随便传,但超过3个参数建议改用对象包装,比如{id, name, type},这样代码更易读
(点烟沉思状)干了五年前端的老油条说句实话:刚开始我也觉得组件通信像玄学。后来想通了,??关键要像快递员送包裹一样,写清楚收发地址和包裹内容??。最近带新人时发现,那些能随手画出数据流向图的,上手速度比死记硬背的快两倍不止。
有个冷知识可能颠覆认知:在Vue3的composition API里,方法传值姿势更多样了。不过嘛,先把Vue2的玩明白了再说,别像新手学吉他,还没会弹和弦就想玩速弹,容易扯着...(消音)
本文由嘻道妙招独家原创,未经允许,严禁转载