4

Ich habe diese Eingabe, die column dynamisch aus der Liste erstellt werden, jetzt muss ich alle Werte der Eingänge erhalten, wenn eine Methode (getAllValues() vorstellen) trittAngular2 erhalten Werte von dynamisch erstellten Eingänge

 <div *ngFor="let cell of column; let i = index;"> 
       <!-- Material design input--> 
       <md-input type="{{cell.type}}" 
       value="{{getInputValue(cell)}}" 
       [placeholder]="cell.label"> 
       </md-input> 
     </div> 

Welche wäre die angular2-Methode, um die Werte aller generierten Eingaben zu erhalten?

+0

Mögliche ViewChildren zu verwenden, wenn es Teil eines Formulars ist sie programmatisch auf das Formular angehängt werden (reaktiv) oder durch Magie (Template-getrieben). – silentsod

+0

@silentsod was wäre die beste Praxis? reaktivieren oder Magie? – commonSenseCode

+0

Die Vorlage ist mehr oder weniger im Einklang mit der Methode "Angular 1", Reactive ist schwerer Code-weise, erleichtert aber das Komponententest. Best Practices, Template-getriebene Vorgehensweisen, sind wahrscheinlich ein geringer Overhead-Ansatz in Bezug auf das Lernen und tatsächliche Codezeilen. Wenn es sich außerhalb eines Formulars befindet, möchten Sie wahrscheinlich eine ViewChildren-Abfrage durchführen, um alle zu erfassen. – silentsod

Antwort

5

Der einfachste Weg, es zu tun ist durch ngForm

<form #myForm="ngForm"> 
     <div *ngFor="let cell of column; let i = index;"> 
      <md-input [type]="cell.type" 
      [name]="cell.name"  <!-- Note the 'name' has to be set --> 
      [ngModel]="cell.value" 
      [placeholder]="cell.label"></md-input> 
     </div> 
     <a (click)="getAllValues(myForm)">print values</a> 
</form> 

Dann haben Sie den Zugriff auf myForm.form.value Objekt in getAllValues ​​() Funktion. Plnkr: https://plnkr.co/edit/84mzcNJliMmvszPq3xMm?p=preview

0

Was ich getan habe ist:

   <md-input #input // NOTICE #input 
          type="{{cell.type}}" 
          value="{{getInputValue(cell) || '--'}}" 
          [placeholder]="cell.label"></md-input> 

in Komponentenklasse:

export class MyComponent { 

    @ViewChildren('input') inputs; 


    public updateData(): void { 
     console.log(this.inputs) //this will give access to id and values (explore it on google chromes console) 
     console.log(this.inputs.toArray().map(x => x.value)) // this gives access to values 
    } 
} 
+0

Template-Variablen können nicht auf diese Weise verwendet werden, wenn Eingaben dynamisch generiert werden, z. B. mit einer ** ngFor ** -Anweisung – Sal

Verwandte Themen