When working with components it may be required to notify other components that something has happened. Perhaps a button has been clicked, an item has been added/removed from a list or some other important update has occurred. In this scenario components need to communicate with parent components.
Angular uses the @Output decorator to enable this type of behavior.
In this activity, you'll learn how to use the @Output decorator and EventEmitter to communicate with components.
To create the communication path from child to parent components, use the @Output decorator on a class property and assign it a value of type EventEmitter:
child.component.ts
@Component({...})class ChildComponent { @Output() incrementCountEvent = new EventEmitter<number>();}
Now the component can generate events that can be listened to by the parent component. Trigger events by calling the emit method:
child.component.ts
class ChildComponent { ... onClick() { this.count++; this.incrementCountEvent.emit(this.count); }}
The emit function will generate an event with the same type as the EventEmitter instance.
Alright, your turn to give this a try. Complete the code by following these tasks:
-
Add an
@OutputpropertyUpdate
child.component.tsby adding an output property calledaddItemEvent, be sure to set the EventEmitter type to bestring. -
Complete
addItemmethodIn
child.component.tsupdate theaddItemmethod; use the following code as the logic:child.component.ts
addItem() { this.addItemEvent.emit('🐢');} -
Update the
AppComponenttemplateIn
app.component.tsupdate the template to listen to the emitted event by adding the following code:<app-child (addItemEvent)="addItem($event)" />Now, the "Add Item" button adds a new item to the list every time the button is clicked.
Wow, at this point you've completed the component fundamentals - impressive 👏
Keep learning to unlock more of Angular's great features.