Kaksisuuntainen tapahtumasidonta Angularissa
Angularissa voidaan myös tehdä kaksisuuntainen tapahtumasidonta molempien komponenttien tapahtumille: vanhemman ja lapsen. Tehdään lapsen HTML-mallissa syöttökenttä kaksisuuntaisella sidonnalla käyttäjän nimelle ja funktiolle, joka muuttaa nimeä:
<input [ngModel]="userName" (ngModelChange)="onNameChange($event)" />
Siirrytään lapsikomponenttiimme ja
tuodaan siihen @Input -dekoraattori.
Sitä tarvitaan syöttökenttien käsittelyyn:
import { Component, Input, Output, EventEmitter } from '@angular/core';
Seuraavaksi sidotaan dekoraattori @Input
käyttäjän nimeen. Ja dekoraattori @Output
sidotaan olioon userNameChange,
jota kutsutaan funktiossa onNameChange:
export class UserComponent {
@Input() userName: string = '';
@Output() userNameChange = new EventEmitter<string>();
onNameChange(model: string) {
this.userName = model;
this.userNameChange.emit(model);
}
}
Nyt siirrytään pääkomponenttiin ja lisätään sen luokkaan nimi-ominaisuus:
export class AppComponent {
name: string = 'alex';
}
Ja vanhemman komponentin HTML-mallissa
toteutetaan kaksisuuntainen sidonta ominaisuuden
userName arvolla vanhemman komponentin
name -ominaisuudesta:
<user-data [(userName)]="name"></user-data>
<p>You choose name: {{ name }}</p>
Toteuta kaksisuuntainen tapahtumasidonta vanhemman ja lapsikomponenttien tapahtumille oppitunnin esimerkin mukaisesti.
Edellisen tehtävän pohjalta tee kaksisuuntainen sidonta käyttäjän iälle.