我有一个模板:
<mat-card *ngFor="let cargo of cargos" class="cont-mat">
/*...*/
<form [formGroup]="cargoSignupForm" (submit)="onSignupForCargo(cargo.id)" *ngIf="!isLoading">
<p>Odaberite kamione s kojima želite izvršiti prijevoz - Težina robe: {{cargo.weight}} kg</p>
<div *ngFor="let truck of (trucksByCargoId.get(cargo.id))">
<input type="checkbox" (change)="onChange(truck._id, $event.target.checked, cargo.id)">{{truck.regNumber}}
</div>
<input type="submit" value="GO" class="button-basic">
</form>
和2个组件函数:
truckFormArray = [[]];
ngOnInit() {
/*...*/
this.cargoSignupForm = new FormGroup({
trucksId: this.fb.array([])
});
/*...*/
}
onChange(truckId: string, isChecked: boolean, cargoId: string) {
this.truckFormArray[cargoId] = <FormArray>this.cargoSignupForm.controls.trucksId;
if (isChecked) {
this.truckFormArray[cargoId].push(new FormControl(truckId));
} else {
let index = this.truckFormArray[cargoId].controls.findIndex(x => x.value == truckId)
this.truckFormArray[cargoId].removeAt(index);
}
}
onSignupForCargo(cargoId: string) {
console.log(this.truckFormArray[cargoId]);
}
我只想要console_log(this.truckFormArray[cargoId])
。每个cargoId
对应不同的truckFormArray
。有了这个解决方案,我也从以前的cargoId
复选框中得到了trucksFormArray
。我希望你明白我的意思。有些地方是一个小错误,但如果你认为有更好的解决方案,那就欢迎你。提前感谢
truckFormArray应该是一个对象
可以安全地假设cargoId
不是一个从0开始顺序递增的数字,因此将其声明为数组没有意义,而是将其声明为对象:
truckFormArray = {};
<<p>原因/strong>: Javascript中的数组总是按照从0开始依次递增的数字进行索引,直到最后一个索引。
truckFormArray不是对象
实例的数据成员。因为它没有初始化为this.truckFormArray
,所以在它前面没有this
。因此,将出现的所有this.truckFormArray
更改为truckFormArray
。
初始化truckFormArray
你有
this.truckFormArray[cargoId] = <FormArray>this.cargoSignupForm.controls.trucksId;
似乎是不正确的。您的trucksId
似乎是一个数字,您尝试将其分配给被视为数组的资源,因此存在类型差异。如果希望将每个trucksId
存储到由卡车上的货物标识的数组中,则需要执行push操作,但只有在选中复选框时才需要执行push操作。因此,您需要的不是上面的内容,而是如下所示:
if (!truckFormArray[cargoId]) {
//Here I created a JS array for the sake of simplicity, but you can
//create a FormArray instance instead if that's more helpful for you
this.truckFormArray[cargoId] = [];
}
<<p>原因/strong>:如果你需要引用的数组还不存在,那么你需要创建它。
<标题>总结你需要
- 修复
truckFormArray
的初始化 - 确保您引用的方式与定义一致
- 在需要时初始化每个货物数组