angular - Tvåvägsdatabindning i modellstyrda formulär
Jag har ett reaktivt formulär, där jag har ett förnamnsfält, ett efternamnsfält och slutligen ett visningsnamnsfält. När jag anger förnamn och efternamn ska värdet i visningsnamnsfältet innehålla förnamnet och efternamnet sammanfogade. Men eftersom jag fortfarande är i inlärningsstadiet kunde jag inte lista ut vad som är fel med denna kod. Alla råd skulle vara till hjälp. Tack.
Här är min kod
<form [formGroup]="myForm" novalidate (ngSubmit)="save(myForm.value, myForm.valid)">
<div class="form-group">
<label for="">First Name</label>
<input type="text" class="form-control" formControlName="firstname" [(ngModel)]="firstname">
</div>
<div class="form-group">
<label for="">Last Name</label>
<input type="text" class="form-control" formControlName="lastname" [(ngModel)]="secondnamename">
</div>
<div class="form-group">
<label for="">Display Name</label>
<input type="text" class="form-control" formControlName="displayname" value='{{firstname}}{{lastname}}'>
</div>
<div class="margin-20">
<div>myForm details:-</div>
<pre>myForm value: <br>{{myForm.value | json}}</pre>
</div>
</form>
Här är min plnkr
Gif :
Svar #1
Du kan också ta det mer "reaktiva" tillvägagångssättet och lyssna på förändringar i formuläret som:
this.myForm.valueChanges.subscribe((form) => {
this.displayname = `${form.firstname} ${form.secondname}`;
});
Då kan du till och med bli av med den onödiga tvåvägsdatabindningen (och det motsvarande lokala tillståndet) som du använder för firstname och secondname på det sättet. Se Plunker: https://plnkr.co/edit/h5aFRDTWfj0gQ69CvVK7?p=preview
Svar #2
Något liknande detta bör fungera (efter: https://angular.io/docs/ts/latest/guide/user-input.html)
I din mall:
<div class="form-group">
<label for="">First Name</label>
<input type="text" class="form-control" formControlName="firstname" [(ngModel)]="firstname" (keyup)="onKey($event)>
</div>
<div class="form-group">
<label for="">Last Name</label>
<input type="text" class="form-control" formControlName="lastname" [(ngModel)]="secondname" (keyup)="onKey($event)>
</div>
<div class="form-group">
<label for="">Display Name</label>
<input type="text" class="form-control" formControlName="displayname" value='{{displayname}}'>
</div>
I din component.ts:
onKey(event:any) {
displayname = firstname + ' ' + secondnamename;
}
