Двупосочна връзка на събития в Angular

В Angular също така може да се направи двупосочна връзка на събития и на двата компонента: родителски и детски. Нека направим в детския HTML шаблон input с двупосочна връзка на потребителското име и функция, която променя името:

app/user/user.component.html<input [ngModel]="userName" (ngModelChange)="onNameChange($event)" />

Нека преминем към нашия детски компонент и да импортираме в него декоратора @Input. Той е необходим за работа с inputs:

app/user/user.component.tsimport { Component, Input, Output, EventEmitter } from '@angular/core';

След това свързваме декоратора @Input към потребителското име. А декоратора @Output го свързваме към обекта userNameChange, който ще се извиква във функцията onNameChange:

app/user/user.component.tsexport class UserComponent {
  @Input() userName: string = '';
  @Output() userNameChange = new EventEmitter<string>();
  onNameChange(model: string) {
    this.userName = model;
    this.userNameChange.emit(model);
  }
}

Сега преминаваме към главния компонент и добавяме към неговия клас свойство име:

app/app.component.tsexport class AppComponent {
  name: string = 'alex';
}

А в HTML шаблона на родителския компонент извършваме двупосочна връзка на свойството userName със стойността на свойството name на родителския компонент:

ap.component.html<user-data [(userName)]="name"></user-data>
<p>You choose name: {{ name }}</p>
Задание 1

Реализирайте двупосочна връзка на събития между родителски и детски компоненти според дадения в урока пример.

Задание 2

На база на предишната задача направете двупосочна връзка на възрастта на потребителя.