Sie können den ausgewählten Personenalterswert aktualisieren, wenn sich die ausgewählte Person über das Ausgabeereignis ngModelChange
ändert.
<div class="input-group">
<span class="input-group-addon">Person Name</span>
<input type="text" [(ngModel)]="selectedPerson.name" name="personName" list="persons" required (ngModelChange)="onChanged($event)">
<datalist id="persons">
<option *ngFor="let p of person_list" [value]="p.name" selected>
{{p.name}}
</option>
</datalist>
</div>
<!-- Display age -->
<div class="input-group">
<span class="input-group-addon">Age</span>
<input type ="text"
placeholder="Age"
[(ngModel)]="selectedPerson.age"
name="age" required>
</div>
Und in Ihrer Komponente Definition:
export class MyComponent {
person_list: any[] = [
{name: 'aaa', age: 21},
{name: 'bbb', age: 31},
{name: 'ccc', age: 41}];
selectedPerson: any = {};
onChanged($event){
var match = this.person_list.find(x => x.name === $event);
this.selectedPerson.age = match.age;
}
}
ich mit datalist
Bindung vor so nicht sicher, ob nicht versucht habe, wenn dies wie z out-of-the-box unterstützt wird select
Element. Es gibt möglicherweise eine einfachere Möglichkeit, dies zu tun (vielleicht hilft eine andere Antwort)
Es funktioniert, aber nur wenn ich den Namen der Person aus der Liste zum ersten Mal auswählen. Wenn ich versuche, erneut auszuwählen, wird ein Fehler ausgegeben, der das Alter der Eigenschaft nicht erreichen kann. Ich denke, es kommt von onChanged() Methode. Während ich die Rücktaste tippe, um die Namensauswahl meiner Person zu löschen, löst sie sofort onChanged() aus. Dies führt zu Übereinstimmung = Null. Um es zu beheben, lege ich this.selectedPerson.age = match.age unter if (match! = Null) {}. Jetzt funktioniert es. Danke für deine Antwort garth74. – Jpatel
Oh ja, habe diesen Null-Check vergessen. Keine Probleme :-) –