typescript - 具有输入字段的动态 FormArray 已阻止输入
问题描述
我正在尝试结合引导程序在angular6中动态创建一个FormArray。
我的 HTML:
<form [formGroup]="form" (ngSubmit)="submit()">
<mat-dialog-content>
<div id="arrayDisplay">
<button mat-button id="dialog-addEntry-button" class="btn blue" type="button" (click)="addItem()">
Add new entry
</button>
<div formArrayName="fooBar" *ngFor="let item of form.controls.fooBar?.value; let i = index;">
<div [formGroupName]="i">
<input formControlName="foo" required placeholder="foo">
<input formControlName="bar" required placeholder="bar">
</div>
</div>
</div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button id="dialog-submit-button" class="btn blue" type="submit"
[disabled]="form.invalid || form.pending || form.pristine">
Accept
</button>
<button mat-button id="dialog-cancel-button" class="btn grey-salsa btn-outline" type="button" mat-dialog-close>
Cancel
</button>
</mat-dialog-actions>
</form>
我的打字稿如下:
import { Observable, throwError } from 'rxjs';
import { Component, OnInit, Inject } from '@angular/core';
import { FormBuilder, Validators, FormGroup, FormArray} from '@angular/forms';
import { catchError } from 'rxjs/operators';
import { HttpEvent, HttpEventType } from '@angular/common/http';
export class ShzizzleNizzle implements OnInit{
public form: FormGroup;
constructor(private fb: FormBuilder)
{
}
createItem(): FormGroup {
return this.fb.group({
foo: 'test',
bar: ''
});
}
addItem(): void {
const myShizzle = this.form.controls.fooBar as FormArray
myShizzle.push(this.createItem());
}
submit(): void {
alert(JSON.stringify(this.form.controls.transactionData.value));
}
ngOnInit() {
this.form = this.fb.group({
fooBar: this.fb.array([])});
}
}
当我执行此代码时,我可以向数组中添加条目,但我无法在字段 foo 和 bar 中输入值。我究竟做错了什么?还是其他地方的问题?比如 webpack 构建。
我已使用这些链接作为创建此表单的指南: tektutorials stackblitz netbasal
编辑:如果我重命名 formArrayName,我可以输入值,但它们不需要验证
解决方案
我设法通过将数组 HTML 更改为:
<div formArrayName="fooBar" *ngFor="let item of getFooBar().controls; let i = index;">
<div [formGroupName]="i">
<input formControlName="foo" required placeholder="foo">
<input formControlName="bar" required placeholder="bar">
</div>
</div>
并将此功能添加到打字稿
getFooBar(): FormArray {
return this.form.get("fooBar") as FormArray
}
推荐阅读
- mule - 由于 JDK 问题,无法打开 Anypoint 工作室
- javascript - 如何在事件发生 jQuery 的 div 之外获取数据属性?
- android - Andorid Webview 如何将数据发布到 application/x-www-form-urlencoded
- c# - 将文件名、位置和大小存储在数组中以记住图像中的选择矩形
- python - 如何创建在按钮单击时显示动态数据的视图
- java - 无法读取android java类中的代码
- android - 有多少 Android 6+ 设备具有 TEE/SE?
- android - JWPlayer:视频未在 ANDROID 中使用 Chrome 版本 71 以全视图打开
- javascript - 在 Javascript 中合并树而不编写循环
- python-2.7 - pipenv:TypeError:强制转换为 Unicode:需要字符串或缓冲区,找到类型