gpt4 book ai didi

angular - 如何在没有 FormBuilder 的情况下在 Angular 2 上推送 FormArray

转载 作者:太空狗 更新时间:2023-10-29 17:09:20 25 4
gpt4 key购买 nike

我有表单数组,我很难解决这个问题。

这是我当前的代码

.ts

ngOnInit() {
this.item = this.fb.group({
codeId: ['', Validators.pattern(/^\d+$/)],
name: ['', [Validators.required, Validators.minLength(3)]],
stepTextarea: ['', []],
steps: [this.fb.array([]), []]
});
}
addProcedure (e): void {
e.preventDefault();
const control = <FormGroup>this.item;
const steps = <FormArray>this.item.controls['steps'];

steps.push(control.get('stepTextarea').value);
control.get('stepTextarea').setValue("", {onlySelf: true})
}

onSubmit({value, valid}: {value: Item, valid: boolean}): void {
const control = <FormGroup>this.item;
console.log(value);
}

.html

<ol ngFor [ngForOf]="item.get('steps').controls">
<span [formGroupName]="i">{{i}}</span>
</ol>

我很难填充和推送。我找不到任何教程。

编辑

提交时我想要这样的东西

{
codeId: 123,
name: "wew",
stepTextarea: "",
steps: ['asdjlkas','12312','12321']
}

最佳答案

由于您希望步骤在提交时看起来像这样:

steps: ['asdjlkas','12312','12321']

你不应该在步骤中使用 formGroup。

表单的构建应如下所示:

ngOnInit() {
this.item = this.fb.group({
codeId: ['', Validators.pattern(/^\d+$/)],
name: ['', [Validators.required, Validators.minLength(3)]],
stepTextarea: [''],
steps: this.fb.array([]) // do not enclose steps inside an array
});
}

编辑:

这将是您的 addProcedure 的样子:

addStep() {
const control = <FormArray>this.item.get('steps');
// push the value from stepTextArea to array
control.push(this.fb.control(this.item.get('stepTextArea').value))
// reset
this.item.get('stepTextArea').reset()
}

你的模板看起来像这样:

<div formArrayName="steps">
<h3>Steps: </h3>
<ol *ngFor="let step of item.get('steps').controls; index as i">
<span>{{step.value}}</span>
</ol>


原始答案以及如何执行 FormArray 的解决方案:

addProcedure 应该是这样的:

  addProcedure (e): void {
const steps = <FormArray>this.item.get('steps');
steps.push(this.fb.control())
}

你的 formarray 模板应该是这样的:

<div formArrayName="steps">
<div *ngFor="let step of item.controls.steps.controls; let i = index" >
<label>Step {{i+1}} </label>
<input [formControlName]="i" />
</div>
</div>

关于angular - 如何在没有 FormBuilder 的情况下在 Angular 2 上推送 FormArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43841140/

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