2017-03-24 1 views
1

Ich habe und Array eines Objekts 'sagen' Person {Name: String, Alter: Nummer}. In meinem HTML zeige ich Name als Eingabeelement mit Auswahl an. Wenn ich einen Namen aus dieser Auswahl wähle, möchte ich das entsprechende Alter der Person in dem Alterseingabeelement anzeigen. Weiß jemand, wie man das macht? Hier ist mein HTML-Code:wie der Wert eines Eingabeelements basierend auf dem Wert von anderen Eingabeelement in Winkel 2

Wie zeige ich Alter basierend auf meiner Auswahl der Person Name? Beide Eingabeelemente befinden sich auf derselben Seite/Komponente.

Antwort

3

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)

+0

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

+0

Oh ja, habe diesen Null-Check vergessen. Keine Probleme :-) –

Verwandte Themen