2016-12-23 25 views
5

Mam składnik z:Ustaw właściwość dynamiczny ngModel wewnątrz ngFor z Kątowymi 2

  • "selectedData": każdy
  • "Fields": tablicę pól. Pole to obiekt o tych właściwościach: etykieta i typ. Pola te opisują obiekt „selectedData”

Przykład:

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

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

Próbuję utworzyć formularz do edycji danych wewnątrz „selectedData”

Oto część moich view:

<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> 

Problem dotyczy tej linii

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

To nie działa tak, jak chciałem. Oto zegarek Google Chrome mojego komponentu kiedy edycji: screen capture of my problem

Jak widać, Angular2 tworzy obiekt o nazwie „selectedData.Label” zamiast korzystać z istniejącego obiektu selectedData.

Czy istnieje rozwiązanie? Czy powinienem zrobić to inaczej?

Thx

+0

dlaczego przegrana? –

+0

Mam naprawdę trudny czas, aby to zrozumieć. Próbujesz więc w swoim przykładzie edytować etykietę istniejących wybranych danych. Następnie powinien to być np. [(NgModel)] = "selectedData.Label", w przeciwnym razie nie zaktualizuje etykiety. – Alex

+0

w jakim celu potrzebujesz tablicy pól? – Alex

Odpowiedz

6

Odpowiedź była prosta:

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

Jeśli field.Name ma wartość 'label', poprzedni kod jest równoważny jak:

[(ngModel)]="selectedData.label" 

ja nie wiedzieć, że "[]" może być użyte w ten sposób.

Powiązane problemy