Passing data to a nested component
In Angular 1 we used $broadcast, $emit, $on to communicate between controllers. But now in angular 2 we have different approach.
In Angular 2, If you want to flow data from Parent Component to Child Component we use @Input Decorator or "inputs" property inside @Component decorator or in a Class. Hear we will discuss the former approach.
Our Directory Structure
Parent Component
//our root app component import { Component, NgModule } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' import { FormsModule } from '@angular/forms'; import { ChildComponent } from './child.component'; import { Character } from './character'; @Component({ selector: 'my-app', template: ` <h1>@input</h1> <div style = "border:2px solid orange; padding:5px;"> <h2>Parent Component</h2> <input [(ngModel)] = "characters[0].name"/> <button (click)="select(characters[0])">Input</button> <br/><br/> <child-component [character]="selectedCharacter"></child-component> </div> `, }) export class App { characters = [ { "id":11, "name":"Name" }]; selectedCharacter: Character; select(selectedCharacter : Character){ this.selectedCharacter = selectedCharacter; } } @NgModule({ imports: [ BrowserModule,FormsModule ], declarations: [ App, ChildComponent ], bootstrap: [ App ] }) export class AppModule {}
Child Component
import { Component, Input} from '@angular/core'; import { Character} from './character'; @Component({ selector: 'child-component', template:` <div style="border:2px solid orange; padding:5px"> <h2>Child Component: <span *ngIf="character">{{character.name}}</span></h2> </div> ` }) export class ChildComponent { @Input() character: Character; }
Full source
Find full source from my github