- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 StackOverflow 的其他示例中,有很多关于在 FormArrays 中使用 FormGroups 的问题。但我的问题恰恰相反。
FormArrays 有一个 push 方法,这使得很多事情成为可能。 FormGroups 确实有一个 addControl 方法来添加简单的 FormControls。 AFAIK FormGroups 没有 addFormArray
或 addFormGroup
方法。因此我需要你的帮助。
以下情况:
this.myForm = this.fb.group({
id: this.fb.control([this.book.id]),
// or short form `id: [this.book.id],`
});
稍后添加一个简单的控件很容易:
this.myForm.addControl('isbn', this.fb.control(this.book.isbn));
但是如何将 FormArrays 和 FormGroups 添加到现有的 FormGroup 中呢?例如,我想为此目的使用以下数组和对象:
const authors = ['George Michael', 'Aretha Franklin'];
const metaData = { description : 'Great Book', publication: 2019}
我想添加 authorsArray
或 metaData
只有在它们存在的情况下。这就是为什么我想稍后添加它们的原因。
附注请忽略验证规则。
最佳答案
FormGroup
addControl方法接受 AbstractControl
作为参数,参数可以是 FormControl
或 FormArray
或另一个 FormGroup
因为它们都扩展 抽象控件
。
class FormGroup extends AbstractControl {}
class FormControl extends AbstractControl {}
class FormArray extends AbstractControl {}
FormBuilder可以帮助您使用 array()
和 group()
方法构建此类控件:
this.myForm = this.fb.group({
id: this.fb.control([this.book.id]),
authors: this.fb.array(['George Michael', 'Aretha Franklin']),
metaData: this.fb.group({ description : 'Great Book', publication: 2019})
});
之后您仍然可以使用工厂来构建您需要的控件(无论它是哪种控件):
this.myForm.addControl('authors',
this.fb.array(['George Michael', 'Aretha Franklin']))
this.myForm.addControl('metaData',
this.fb.group({description: 'Great Book', publication: 2019}))
关于angular - react 形式 : How to add new FormGroup or FormArray into an existing FormGroup at a later point in time in Angular till v14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334283/
我是一名优秀的程序员,十分优秀!