2016-12-23 2 views
5

Ich habe eine Komponente mit:eine dynamische Eigenschaft in ngModel innen ngFor Set, mit Angular 2

  • "selectedData": jede
  • "Felder": Ein Array von Feldern. Ein Feld ist ein Objekt mit diesen Eigenschaften: Label und Typ. Diese Felder beschreiben das Objekt „selectedData“

Beispiel:

selectedData = { Label:"test", IsUsed:false} 

fields = [{name:'label', type:'string'},{name:'IsUsed, type:'boolean'} 

Ich versuche, eine Form zu erzeugen, zum Bearbeiten der Daten in ‚selectedData‘

Hier ist der Teil meines Ansicht:

<div class="ui-grid-row" *ngFor="let myField of fields" > 
      <div class="ui-grid-col-4"><label for="{{myField.name}}">{{myField.name}}</label></div> 
      <div class="ui-grid-col-8"><input pInputText id="{{myField.name}}" [(ngModel)]="this['selectedData.' + myField.name]" /></div> 
     </div> 

Das Problem ist mit dieser Linie

[(ngModel)]="this['selectedData.' + myField.name]" 

Es funktioniert nicht so, wie ich wollte. Hier ist die Google Chrome Uhr meiner Komponente, wenn ich bearbeiten: screen capture of my problem

Wie Sie sehen können, Angular2 erstellt ein Objekt mit dem Namen „selectedData.Label“ anstelle das selectedData vorhandene Objekt zu verwenden.

Gibt es eine Lösung? Oder sollte ich es anders machen?

Thx

+0

Warum ein Downvote? –

+0

Ich habe eine wirklich schwierige Zeit, dies zu verstehen. Sie versuchen also in Ihrem Beispiel, das Label von existedData zu bearbeiten. Dann sollte es z.B. '[(ngModel)] =" selectedData.Label "sein, andernfalls wird das Etikett nicht aktualisiert. – Alex

+0

für welchen Zweck benötigen Sie die Felder Array? – Alex

Antwort

6

Die Antwort war einfach:

[(ngModel)]="selectedData[myField.name]" 

Wenn field.Name einen Wert von 'label' hat, der vorherige Code entspricht wie:

[(ngModel)]="selectedData.label" 

ich nicht tat weiß, dass das '[]' auf diese Weise benutzt werden könnte.

Verwandte Themen