Outputs provide a mechanism for a child component to emit events up to its parent component.

This post covers Angular 2 and up

In the parent component's template, define event bindings as part of the child component's selector. A binding should point to a method defined in the parent component's class that takes action on the data received from the child. <^>$event<^> contains the payload emitted from the child:

				
					
[label Parent component template: story.component.html]

&lt;selected-story (selectStory)="getStory($event)"&gt;

&lt;/selected-story&gt;

				
			
				
					
[label Parent component class: story.component.ts]

export class StoryComponent {

 story: string = '';





				
			

In the child component, import <^>Output<^> and <^>EventEmitter<^> from <^>@angular/code<^> and define your outputs with the <^>@Output<^> decorator like this:

				
					
[label Child component class: selected-story.component.ts]

import { Component, Output, EventEmitter } from '@angular/core';



//...

export class SelectedStoryComponent {

 story: string;

 @Output() selectStory = new EventEmitter&lt;string&gt;();



				
			

Our <^>EventEmitter<^> object has an <^>emit()<^> method that pushes the event up to the parent component.

Now in the child component's template, you can define event bindings that will emit back up to the parent:

				
					
[label Child component template: selected-story.component.html]

&lt;input #storyChoice placeholder="Your fav story"&gt;

&lt;button (click)="onSelectStory(storyChoice.value)"&gt;

				
			

See Also:

component illustration for: See Also: