私は、reactFormsを使用してコントロールを動的に追加しようとしています。Angular2エラーが発生しました。
私のコードでは、ドロップダウンメニューに値を入力しようとしています。これらは動的なフィールドなので、formArray
を使用しています。
データ:
{ "ruleName": "", "ruleDescription": "", "ruleOutcome": "", "addVariable": "2", "variables": [ { "id": "2", "name": "Device Trust Score", "operator": [ { "name": "Greater Than <", "id": 3 }, { "name": "Less Than >", "id": 4 } ], "values": "" } ] }
HTML:
<tbody formArrayName="variables">
<tr *ngFor="let variable of addRuleForm.get('variables').controls; let i=index" [formGroup]="variable">
<td>{{ addRuleForm.controls.variables.controls[i].controls.name.value}}
<input type="hidden" formControlName="id" value="addRuleForm.controls.variables.controls[i].controls.id.value" [attr.id]="'id'+i">
</td>
<td>
<select class="form-control input-sm" formControlName="operator" [attr.id]="'operator'+i">
<option value="">Select an Operator</option>
<option *ngFor="let o of addRuleForm.controls.variables.controls[i].controls.operator.value" value="{{ o.id }}">{{ o.name }}</option>
</select>
</td>
<td>
<button type="button" class="btn btn-danger btn-sm" (click)="removeVariable(v.id)"><i class="fa fa-trash-o"></i>
</button>
</td>
</tr>
</tbody>
このセレクト入力がうまくページにレンダリングされます。私はソースを調べ、値がIDに正しく設定されていることを確認します。
Error: Error trying to diff '4'. Only arrays and iterables are allowed
私が選択した項目のIDを参照:
はしかし、すぐに私はそれからオプションを選択すると、私はこのエラーを取得します。
どのような考えですか?
":2}]'。それが私の '* ngFor'が反復しようとしているものです – SBB
それは問題です。 * ngForは、JSONオブジェクトではなく、配列とiterableのみを反復できます。 – DeborahK