gpt4 book ai didi

javascript - Angular react 形式阵列

转载 作者:行者123 更新时间:2023-11-30 14:22:33 25 4
gpt4 key购买 nike

我在访问位于 orderForm 内的 opticanOrders 内的产品数组时遇到问题。在控制台中,我看到为了访问产品数组,我应该像这样引用它:

orderForm.controls.opticianOrders.controls.products.controls

但它不起作用。

这是我的组件:

  constructor(private customerService: CustomerService, private fb: FormBuilder) { }

orderForm: FormGroup;

ngOnInit() {
this.orderForm = this.fb.group({
name: [''],
surName: [''],
opticianOrders: this.fb.group({
orderDescription: [''],
products: this.fb.array([
this.initProduct()
])
}),
});
}

save(model: Customer) {
// call API to save customer
console.log(model);
}

onCancel(form: NgForm){
this.createState.emit(false);
}

initProduct(){
return this.fb.group({
name: [''],
manufacturerName: ['']
})
}

addProduct(){
const control = <FormArray>this.orderForm.controls['products'];
control.push(this.initProduct());
}

removeProduct(i: number){
const control = <FormArray>this.orderForm.controls['products']
}

HTML

<form [formGroup]="orderForm" novalidate (ngSubmit)="save(orderForm)">

<!-- name -->
<div class="form-group">
<label>Name</label>
<input type="text" formControlName="name">
</div>

<!-- surName -->
<div class="form-group">
<label>Last Name</label>
<input type="text" formControlName="surName">
</div>

<div formGroupName="opticianOrders" class="form-group">
<label>Order Description</label>
<input type="text" formControlName="orderDescription">
</div>
<div formArrayName="products">
<div *ngFor="let product of orderForm.controls.opticianOrders.controls.products.controls; let i=index">
<div>
<span>Address {{i + 1}}</span>
<span *ngIf="orderForm.controls.opticianOrders.controls.products.controls.length > 1"
(click)="removeProduct(i)">
</span>
</div>

<div [formGroupName]="i">
<div>
<label>Product name</label>
<input type="text" formControlName="name">
</div>
</div>
</div>
</div>
<button type="submit" [disabled]="!orderForm.valid">Submit</button>
</form>

最佳答案

请按照以下内容替换您的 HTML 代码

<form [formGroup]="orderForm" (ngSubmit)="save()">

<!-- name -->
<div class="form-group">
<label>Name</label>
<input type="text" formControlName="name">
</div>

<!-- surName -->
<div class="form-group">
<label>Last Name</label>
<input type="text" formControlName="surName">
</div>

<div class="form-group">
<label>Order Description</label>
<input type="text" formControlName="orderDescription">
</div>
<div formArrayName="products">
<div *ngFor="let product of orderForm.controls.products['controls']; let i=index">
<div>
<span><strong>Product {{i + 1}}</strong></span>
<span class="fa fa-times" *ngIf="orderForm.controls['products'].controls.length > 1" (click)="removeProduct(i)">
</span>
</div>

<div [formGroupName]="i">
<div>
<label>Product name</label>
<input type="text" formControlName="name">
</div>
<div>
<label>Product Manufacturer name</label>
<input type="text" formControlName="manufacturerName">
</div>
</div>
</div>

<div class="margin-20">
<a (click)="addProduct()" style="cursor: pointer; text-transform: uppercase; font-weight: 500">
Add another Entry +
</a>
</div>
</div>
<button class="btn btn-primary" type="submit" [disabled]="orderForm.invalid">Submit</button>
</form>

请按以下替换 TS 代码。我在保存表单的方法中使用了一个小技巧,看看它是否适合你?

  constructor(private fb: FormBuilder) { }

orderForm: FormGroup;

ngOnInit() {
this.orderForm = this.fb.group({
name: ['', Validators.required],
surName: ['', Validators.required],
orderDescription: ['', Validators.required],
products: this.fb.array([
this.initProduct()
])
});
}

save() {
console.log(this.orderForm.value);
const obj = {
name: this.orderForm.value.name,
surName: this.orderForm.value.surName,
orderDescription: this.orderForm.value.orderDescription,
opticianOrders: {
products: this.orderForm.value.products
},
};

console.log(obj);
}

initProduct() {
return this.fb.group({
name: ['', Validators.required],
manufacturerName: ['', Validators.required]
})
}

addProduct() {
const control = <FormArray>this.orderForm.controls['products'];
control.push(this.initProduct());
}

removeProduct(i: number) {
const control = <FormArray>this.orderForm.controls['products'];
control.removeAt(i);
}

关于javascript - Angular react 形式阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52502623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com