angular - Al hacer clic en un Componente, pasar el Componente mismo como parámetro
Los componentes se generan a través de un ngFor. El mismo manejador de eventos de clic está vinculado a todos ellos. Quiero capturar el Componente en el que el usuario hizo clic dentro del manejador de eventos como un argumento.
Plantilla
<div>
<app-my-component (click)="pageClicked(<sender>)" *ngFor="let page of pages"></app-my-component>
</div>
Código Detrás
pageClicked(sender: MyComponent): void {
// sender would be the COMPONENT who called this function.
}
Lo que ya he intentado
- Al hacer que el componente sea una variable de plantilla dándole un nombre
#comp, obtuve un objeto vacío - Usando la palabra clave
this,thisen este contexto es el componente padre, generando los componentes más pequeños mediante ngFor - Enviando
$eventcomo un parámetro y encontrando el componente a través delpath, no quiero el elemento html, quiero el componente completo y acceso a sus Variables y Métodos públicos
Eventualmente, después de capturar el componente, querré establecer su entrada [selected] en true y borrar el último componente seleccionado, lo cual no debería ser tan difícil si puedo simplemente obtener el componente y almacenarlo en una variable local.
Respuesta #1
Quizás intenta:
<ng-container *ngFor="let page of pages">
<app-my-component #component (click)="pageClicked(component)"
</app-my-component>
</ng-container>
Respuesta #2
si utilizas una variable de referencia de plantilla, pasas todo el componente,
<app-my-component #component (click)="pageClicked(component)"..>
si tienes un @OputPut, úsalo cuando emitas, pero renombra el evento (click), usa por ejemplo (onClick)
//your component
@Output()onClick:EventEmitter<MyComponent>=new EventEmitter<MyComponent>()
clickButton(){
this.onClick.emit(this)
}
ver a un tonto stackbliz
