You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将event及pick值等多数据从子组件传递给父组件

你的实现思路完全是正确的,父子组件通信用@Output + EventEmitter是Angular官方推荐的标准方案,只需要调整几处代码就能实现同时传递event和pick的需求:

1. 修改子组件 event.component.html 点击事件,传递当前选中的pick

原来的click事件只传了event对象,现在要把当前循环到的pick也作为参数传入:

<p class="pick" *ngFor="let pick of market.picks" (click)="onQuotaClick(event, pick)" >
  {{ market.marketId == 1 ? pick.odds : ''}}
</p>

2. 修改子组件 event.component.ts 的事件触发逻辑,同时抛出event和pick

调整参数接收,把两个值包装成对象抛出给父组件:

onQuotaClick(event: any, pick: any) {
  this.onAddToTicket.emit({
    event: event,
    pick: pick
  });
}

3. 修改父组件 events.component.html 的事件监听,正确接收子组件抛出的值

注意子组件抛出的所有值都需要用内置变量$event接收,不能直接写父组件循环里的event变量:

<app-event *ngFor="let event of eventsByDay.events"
  [event]="event"
  [eventsByDay]="eventsByDay"
  (onAddToTicket)="addToTicket($event)"
></app-event>

4. 修改父组件 events.component.ts 的处理方法,把值传给service

现在接收到的参数已经包含了event和pick两个值,直接传给TicketService即可:

addToTicket(ticketData: {event: any, pick: any}) {
  // 可根据你service的入参要求调整,支持直接传整个对象或者拆分传参
  this.ticketService.addToTicket(ticketData);
}

额外优化建议

尽量避免使用any类型,可以给event、pick定义对应的TS接口,既保证类型安全也方便后续维护。

内容的提问来源于stack exchange,提问作者Marijan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:06:01