尝试差异的 Angular2 错误
Angular2 Error trying to Diff
我有一个表单,我正在尝试使用 reactiveForms 动态添加控件。
在我的代码中,我试图填充一个下拉菜单。我正在使用 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>
这个 select 输入可以很好地呈现到页面。我检查了来源,发现该值也已正确设置为 ID。
但是,一旦我 select 从中选择一个选项,我就会收到此错误:
Error: Error trying to diff '4'. Only arrays and iterables are allowed
引用了我 select 编辑的项目 ID。
有什么想法吗?
该消息可能告诉您您正在尝试 *ngFor
它不理解的内容。
我假设这个 addRuleForm.controls.variables.controls[i].controls.operator.value
可能是 4?您是想在这里使用 value
属性 吗?
如果要遍历 JSON 对象,可以使用 Object.keys。这里有几个例子:
我有一个表单,我正在尝试使用 reactiveForms 动态添加控件。
在我的代码中,我试图填充一个下拉菜单。我正在使用 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>
这个 select 输入可以很好地呈现到页面。我检查了来源,发现该值也已正确设置为 ID。
但是,一旦我 select 从中选择一个选项,我就会收到此错误:
Error: Error trying to diff '4'. Only arrays and iterables are allowed
引用了我 select 编辑的项目 ID。
有什么想法吗?
该消息可能告诉您您正在尝试 *ngFor
它不理解的内容。
我假设这个 addRuleForm.controls.variables.controls[i].controls.operator.value
可能是 4?您是想在这里使用 value
属性 吗?
如果要遍历 JSON 对象,可以使用 Object.keys。这里有几个例子: