我正在做一个Angular 14的表格。
我正在尝试添加一个有Angular 材质cips字段。
在组件的Typescript文件中,我有:
constructor(private fb: FormBuilder,) { }
public visible: boolean = true;
public selectable: boolean = true;
public removable: boolean = true;
public addOnBlur: boolean = true;
public readonly separatorKeysCodes: number[] = [ENTER, COMMA];
public myForm: FormGroup = new FormGroup({
companyName: new FormControl('', Validators.required),
countryName: new FormControl('', Validators.required),
bussinessLines: new FormGroup({
bussinessLines: this.fb.array([], Validators.required)
}),
});
get bussinessLineControls(): FormArray {
return this.myForm.get('bussinessLines') as FormArray;
}
public add(event: MatChipInputEvent): void {
const input = event.input;
const value = event.value;
// Add our bussinessLine
if ((value || "").trim()) {
this.bussinessLineControls.push(this.fb.control(value));
}
// Reset the input value
if (input) {
input.value = "";
}
}
public remove(bussinessLine: string): void {
const index = this.bussinessLineControls.value.indexOf(bussinessLine);
if (index >= 0) {
this.bussinessLineControls.removeAt(index);
}
}
在模板中:
<form [formGroup]="myForm" novalidate>
<mat-form-field appearance="outline" floatLabel="always" class="example-chip-list">
<mat-label>Bussiness lines:</mat-label>
<mat-chip-list #chipList aria-label="Delect business line" formArrayName="bussinessLines">
<mat-chip *ngFor="let bussinessLine of bussinessLineControls.value" [selectable]="selectable" [removable]="removable"
(removed)="remove(bussinessLine)">
{{bussinessLine}}
<mat-icon matChipRemove *ngIf="removable">Cancel</mat-icon>
</mat-chip>
<input placeholder="New business line..."
[matChipInputFor]="chipList"
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
[matChipInputAddOnBlur]="addOnBlur"
(matChipInputTokenEnd)="add($event)">
</mat-chip-list>
</mat-form-field>
</form>
问题是
由于我无法理解的原因,控制台抛出错误:
Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables
它似乎发生在这里:
<input placeholder="New business line..."
[matChipInputFor]="chipList"
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
[matChipInputAddOnBlur]="addOnBlur"
(matChipInputTokenEnd)="add($event)">
问题
1.导致此错误的原因是什么?
1.最可靠的修复方法是什么?
2条答案
按热度按时间jjjwad0x1#
发生错误的原因是您试图迭代对象(FormArray)而不是数组。"FormArray"类未实现Iterable接口。
若要修复此问题,可以使用FormArray的. controls属性,该属性返回其控件的数组。因此,在模板中,将以下内容替换为:
与:
在remove函数中,将其更改为:
velaa5lx2#
嗯......它是白纸黑字写的,或者更像是红色和红色:)您将
object
传递到了 *ngFor指令的某个地方。您没有提供足够的代码来查找bug,至少我无法找到。您是否可以证明更大的代码块?至少包括<mat-chip-grid #chipList>
和mat-chip-row *ngFor="let var of list"
?因为您组件中唯一的可迭代对象是:separatorKeysCodes
和bussinessLineControls
吸气剂。如果我蒙着眼睛射击,我会假设您忘记将
controls
属性放入*ngFor
中