2016-07-17 10 views
4

の内部ngModel htmlファイルで、私はこれを書いたので、私は、私の入力から文字列の配列をバインドしようとしています:Angular2 ngFor

<div *ngFor="let word of words; let in=index" class="col-sm-3"> 
     <div class="form-group"> 
     <input type="text" [(ngModel)]="words[in]" class="form-control" [attr.placeholder]="items[in]" required> 
     </div> 
    </div> 

しかし、予想通り、私がログインしたときので、これは動作しませんでしたwords変数は、Componentクラスで初期化された空の配列を表示します。また、私は別のコンポーネントから変数を記録して、それが私の問題の問題であるはずです。私は2つのコンポーネントを持っています:

  • クエリコンポーネントの配列を含むフォームコンポーネントです。
  • 単語の文字列を含むクエリ子コンポーネントです。だから、

、言葉変数は、クエリコンポーネントに宣言されているが、私はこのようなフォームコンポーネントを介して、この変数をログに記録しています:

console.log(JSON.stringify(this.queries)); 

問合せはフォームコンポーネントでクエリの配列ですが:

queries:Query[] = []; 

ありがとうございました!

+0

は、問題は明確ではありません。あなたが正確に望むものを具体的に伝えることができるのであれば? – micronyks

+0

多くのテストの後で、私の問題は、更新後にフォームのコンポーネントにクエリワードを返すことです。 –

+0

各入力タグに一意の名前属性が定義されている必要があります。 http://stackoverflow.com/questions/39336708/angular2-ngmodel-inside-ngfor-data-not-binding-on-input –

答えて

12

問題は、プリミティブ値(words)の配列をngForに使用することです。

あなたが

words = [{value: 'word1'}, {value: 'word2'}, {value: 'word3'}]; 

のようにオブジェクトの配列に単語を変更してもtrackByを使用して解決できるかもしれません

<div *ngFor="let word of words; let in=index" class="col-sm-3"> 
     <div class="form-group"> 
     <input type="text" [(ngModel)]="words[in].value" class="form-control" [attr.placeholder]="items[in]" required> 
     </div> 
    </div> 

このようにそれを使用しますが、私はわからないことができます。

+0

こんにちは、そこに!あなたはもう少し問題を説明できますか?正直なところ、私はOPが求めているものは得られませんが、両方の方法(プリミティブやオブジェクトの配列)はうまくいくようです:http://plnkr.co/edit/7ePXDWCwfeI0WglCj3KN?p=preview ... – acdcjunior

+0

私はこれを試しましたそれでも動作しません。ちなみに、私は入力にイベントキーアップを追加し、同じコンポーネントに単語配列を記録しようとしました。 Annndそれは働いたので、私の問題は、単語配列をフォーム(親)コンポーネントに返信することです。 –

+1

@ e.m.b "does not work"はあまり情報を提供しません。 –

1

これを解決するには、@Input()関数を使用し、クエリ配列とクエリインデックス番号を渡します。サポートに感謝します。

3

で説明したように各入力タグは、定義されたユニークな '名前' 属性を持つことがあります。

Angular2 ngModel inside ngFor (Data not binding on input)

ここで修正されたコードです:私に

<div *ngFor="let word of words; let in=index" class="col-sm-3"> 
    <div class="form-group"> 
    <input type="text" [(ngModel)]="words[in]" name="word{{in}}" class="form-control" [attr.placeholder]="items[in]" required> 
    </div> 

+0

はい、私はこれに苦しんで、別の名前を提供することによって解決しました。 ありがとう –