Dans mon application angulaire 2 ngrx, j'ai une structure avec des éléments imbriqués:
parentContainer.ts
@Component({
template: `<parent-component
(onEvent)="onEvent($event)"
></parent-component>`,
})
class ParentContainer {
constructor(private store: Store<IState>) { }
private onEvent = (payload: IEventPayload) {
this.store.dispatch(new EventAction(payload));
}
}
parentComponent.ts
@Component({
selector: 'parent-component',
templateUrl: 'patent.html',
})
class ParentComponent {
@Output() private onEvent = new EventEmitter<IEventPayload>();
}
patent.html
<div>
...some content
<child-component></child-component>
</div>
Dans ce cas, je peux émettre un événement à partir du composant parent, mais je dois le faire à partir du composant enfant. Y a-t-il moyen de passer événement du composant parent au composant enfant, puis d'utiliser quelque chose comme ceci: this.onEvent.emit({... some payload})
?
Dans votre patent.html, vous pouvez laisser le composant enfant émettre directement via onEvent comme ceci:
<child-component (onChildEvent)="onEvent.emit($event)">
</child-component>
En composant enfant:
import { Component, OnInit, EventEmitter, Output } from '@angular/core';
... dans le corps de la classe:
@Output() onMyEvent = new EventEmitter<boolean>();
... événement d'appel
this.onMyEvent.emit(true);
Dans le modèle:
<child-component (onChildEvent)="onEvent.emit($event)">
</child-component>
En composant parent:
onChildEvent(boolean){
alert("Event now!");
}