For Parent -> Child, use @Input
For Child -> Parent, use @Output
So to use both:
In the Parent Component
Typescript:
onValueInParentComponentChanged(value: string) {
this.valueInParentComponent = value;
}
Html
<child-component
(onValueInParentComponentChanged)="onValueInParentComponentChanged($event)"
[valueInParentComponent]="valueInParentComponent">
</child-component>
In the Child Component
Typescript:
export class ChildComponent {
@Input() valueInParentComponent: string;
@Output() onValueInParentComponentChanged = new EventEmitter<boolean>();
}
onChange(){
this.onValueInParentComponentChanged.emit(this.valueInParentComponent);
}
Html
<input type="text" [(ngModel)]="valueInParentComponent"
(ngModelChange)="onChange($event)"/>
Full Example
https://plnkr.co/edit/mc3Jqo3SDDaTueNBSkJN?p=preview
Other ways to accomplish this:
https://angular.io/docs/ts/latest/cookbook/component-communication.html