Desejo passar o valor de "evento" e também o valor de "escolha" do evento para o serviço, para posteriormente usá-los em outro componente. Não tenho certeza de como obter o valor de "escolha" da criança do escopo ngFor para o componente pai e se isso é possível ou há outra maneira de fazer isso?
Acabei de começar a aprender Angular, então se eu estiver fazendo algo errado aqui, me avise, eu agradeço!
events.component.html
<div class="league" *ngFor="let league of events.locations[0].leagues">
<h1>{{ league.name }}</h1>
<div class="events" *ngFor="let eventsByDay of league.eventDateGroups">
<div class="day-market">
<p class="date">{{ eventsByDay.date | date :'mediumDate' }}</p>
<div class="main-markets">
<p>1</p>
<p>x</p>
<p>2</p>
</div>
</div>
<app-event *ngFor="let event of eventsByDay.events"
[event]="event"
[eventsByDay]="eventsByDay"
(onAddToTicket)="addToTicket(event)"></app-event>
</div>
</div>
events.component.ts
import { Component, OnInit } from '@angular/core';
import { EventsService } from 'src/app/services/events.service';
import { TicketService } from 'src/app/services/ticket.service';
@Component({
selector: 'app-events',
templateUrl: './events.component.html',
styleUrls: ['./events.component.scss']
})
export class EventsComponent implements OnInit {
events: any = [];
constructor(
private eventsService: EventsService,
private ticketService: TicketService
) { }
ngOnInit(): void {
this.eventsService.getEvents().subscribe(events => this.events = events);
}
addToTicket(event: any) {
this.ticketService.addToTicket(event);
}
}
event.component.html
<ul class="events-by-day">
<li class="event">
<div class="event-info">
<h3>{{ event.fixture.participants[0].name }} |
{{ event.fixture.participants[1].name }}</h3>
<p>{{ event.fixture.startDate | date :'shortTime' }}</p>
</div>
<div class="markets" *ngFor="let market of event.markets | filter: 1">
<p class="pick" *ngFor="let pick of market.picks"
(click)="onQuotaClick(event)" >
{{ market.marketId == 1 ? pick.odds : ''}}</p>
</div>
</li>
</ul>
event.component.ts
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-event',
templateUrl: './event.component.html',
styleUrls: ['./event.component.scss']
})
export class EventComponent implements OnInit {
@Input() event: any;
@Input() eventsByDay: any;
@Output() onAddToTicket: EventEmitter<any> = new EventEmitter();
constructor() { }
ngOnInit(): void {
}
onQuotaClick(event: any) {
this.onAddToTicket.emit(event);
}
}
Sim você pode.
A maneira mais direta é emitir um objeto envolvendo o event
e o pick
.
Por exemplo, no HTML:
(click)="onQuotaClick({event: event, pick: pick})"
E propague este tipo em {event:any; pick: any}
todas as funções.
Observe também que você não deve usar any
mas tipos reais, caso contrário, você perderá toda a segurança que o Typescript oferece.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras