私は入力から文字列の配列をバインドしようとしているので、htmlファイルでこれを書きました:
<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>
しかし、単語変数をログに記録すると、Componentクラスで初期化された空の配列が表示されるため、これは期待どおりに機能しませんでした。また、別のコンポーネントの変数をログに記録しますが、それが私の問題の問題であると思われます。私には2つのコンポーネントがあります。
したがって、words変数はクエリコンポーネントに宣言されますが、次のようにフォームコンポーネントを介してこの変数を記録しています。
console.log(JSON.stringify(this.queries));
クエリは、フォームコンポーネント内のクエリの配列です。
queries:Query[] = [];
ご協力いただきありがとうございます!
問題は、words
でプリミティブ値の配列(ngFor
)を使用することです。
単語を次のようなオブジェクトの配列に変更できます
words = [{value: 'Word1'}, {value: 'Word2'}, {value: 'Word3'}];
そしてそれを次のように使用します
<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>
これはtrackBy
を使用しても解決可能かもしれませんが、わかりません。
各入力タグには、次のように定義された一意の「名前」属性が必要です。
ngFor内のAngular2 ngModel(データが入力にバインドされていない)
修正されたコードは次のとおりです。
<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>
@Input()関数を使用し、クエリ配列+クエリインデックス番号を渡すことでこれを解決しました。サポートしてくれてありがとう。