Hone logo
Hone
Problems

Implementing a Custom Output Event in Angular

Angular's event system is powerful, but sometimes you need to signal events from a component to its parent in a more structured way than simple DOM events allow. This challenge focuses on creating a custom output event in Angular, allowing a child component to emit data or signals to its parent component, enabling flexible communication and data flow between components. This is a fundamental pattern for building reusable and modular Angular applications.

Problem Description

You are tasked with creating a simple child component called DataEmitterComponent that emits a custom event called dataEmitted when a button is clicked. This event should carry a payload – a string representing the data being emitted. The parent component, AppComponent, should listen for this dataEmitted event and display the received data in a designated area.

What needs to be achieved:

  1. Create a DataEmitterComponent that includes a button.
  2. When the button is clicked, the DataEmitterComponent should emit the dataEmitted event with a payload (e.g., "Data from Child").
  3. Create an AppComponent that receives the dataEmitted event from DataEmitterComponent.
  4. The AppComponent should display the received data in a <div> element.

Key Requirements:

  • Use Angular's @Output decorator to define the custom event.
  • Use Angular's EventEmitter to emit the event.
  • Ensure the parent component properly subscribes to and handles the emitted event.
  • The payload should be a string.

Expected Behavior:

When the button in DataEmitterComponent is clicked, the text "Data from Child" (or whatever string is emitted) should appear in the <div> within AppComponent. Clicking the button multiple times should update the displayed text accordingly.

Edge Cases to Consider:

  • What happens if the parent component doesn't subscribe to the event? (The event should still be emitted, but nothing will happen in the parent.)
  • Consider how to handle potential errors or unexpected data types in the emitted payload (though error handling is not explicitly required for this challenge).

Examples

Example 1:

Input: Clicking the button in DataEmitterComponent
Output: The <div> in AppComponent displays "Data from Child"
Explanation: The DataEmitterComponent emits the dataEmitted event with the payload "Data from Child", which AppComponent receives and displays.

Example 2:

Input: Clicking the button in DataEmitterComponent multiple times
Output: The <div> in AppComponent updates with "Data from Child" each time the button is clicked.
Explanation: Each click triggers a new emission of the dataEmitted event, updating the displayed data in AppComponent.

Constraints

  • The payload of the dataEmitted event must be a string.
  • The solution must be implemented using standard Angular practices.
  • No external libraries are allowed.
  • The solution should be concise and readable.

Notes

  • Think about how to declare the @Output event emitter in the child component.
  • Consider how to subscribe to the event in the parent component and update the UI accordingly.
  • Focus on the core functionality of emitting and receiving the custom event. Styling and complex UI elements are not required.
  • Remember to import EventEmitter and Output from @angular/core.
Loading editor...
typescript