- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 FormGroup,它有这样一个元素。
books: this.fb.array([this.buildBookFormGroup()])
fb 是 FormBuilder。 buildBookFormGroup() 函数返回一个 FromGroup,这样我就可以从同一个表单中添加/删除多本书。
buildBookFormGroup(): FormGroup {
return this.fb.group({
author: new FormControl(''),
price: new FormControl(0),
});
}
我有获取表单控件、添加和删除“书籍”控件中的表单组的功能。
现在,我已经使用这个表单添加了多本书并持久化了它们。我想制作一个编辑页面,我想在其中获取现有数据并填充表单。为此,我使用“patchValue”。但是,patchValue 不适用于 FormArray。查看了多个问题和答案,我更加困惑了。这是我打补丁的方式。
if (this.bookshop.books.length > 0) {
let booksFormGroupArray: FormGroup[] = [];
this.bookshop.books.forEach((book, index) => {
booksFormGroupArray.push(this.buildBookFormGroup());
Object.keys(booksFormGroupArray[index].controls).forEach(key => {
booksFormGroupArray[index].patchValue({
[key]: book[key]
})
})
});
this.bookForm.patchValue({
books: this.fb.array(booksFormGroupArray)
});
}
只有第一个书籍对象被插入到表单的“书籍”中。有什么解决方法吗?
最佳答案
当您使用 patchValue
时,您必须提供值而不是 FormGroups 的数组。
因此,您将值直接修补到动态创建的 FormGroup
并将组推送到 array
的 controls
中,它将起作用。
因此,新的修补方法将是:
if (this.bookshop.books.length > 0) {
const bookArray = this.bookForm.get("books") as FormArray;
bookArray.clear();
this.bookshop.books.forEach(book => {
const group = this.buildBookbookFormGroup();
Object.keys(group.controls).forEach(key => {
group.patchValue({
[key]: book[key]
});
});
bookArray.controls.push(group);
});
}
如果您想遍历 FormArray
值,则:
get books() {
return (this.bookForm.get("books") as FormArray).controls.map(m => m.value);
}
HTML:
<div *ngFor="let book of books">
<p>Author: {{book.author}},   Price: {{book.price}}</p>
</div>
工作演示 StackBlitz .
结果:
关于angular - 如何在 Angular 中将 patchValue 与 FormArray 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67001989/
我正在推送一个带有一些值的 FormArray,我需要在加载列表后在某些字段中动态设置禁用属性。我的问题是:有没有办法只使用 patchValue 来设置值和设置 disabled 属性? 我尝试过类
我有一个包含多个嵌套表单数组的响应式(Reactive)表单。在我的表单中,我可以有多个段和多个集合,问题是在从数据库获取数据时使用 patchValue() 或 setValue() 来编辑我的表单
我正在尝试使用 patchValue() 通过表单组设置输入值,但输入仍然为空,这是我的代码示例... component.html Unique User ID Store
它看起来像 Angular2 的 FormGroup.patchValue() 吗?不会将新元素插入数组。 例如这样的事情: ngOnInit() { this.form = this.for
我使用模板驱动并尝试使用 patchValue 初始化我的表单,但它不起作用。 如果我使用双向绑定(bind)来设置值 [(fooBar)] 甚至 setTimeout,我可以让它工作,但我只是想知道
正如我之前在 question 中询问的那样 我想创建一个嵌套表单,其中父级与 child 的 formControlNames 无关 假设我们有一个组件 componentA.component.t
我有这样的 Json 数据: assets/details.json { "name" : "john", "age" : 20, "address" : [{
我正在更新 blur 上的字段值,使其成为 blur 上的货币值。当我输入我的值并离开 formcontrol 时,模糊工作更新并使值 (20.00) 到 ($20.00) 或 (20.05060)
我必须知道 patchValue 方法的概念。使用补丁值方法更新表单值时,表单变脏。 // using this way setTimeout(() => { this.skillForm
示例代码如下: model={name: "D100" value: "Dying"}; for (let key in model) { if(this.divisio
我正在使用 Angular 表单生成器添加数据,其中表单有一个选择元素,其值是绑定(bind)到对象,但是当我尝试使用补丁值方法或设置值方法字段编辑表单时,除了选择正在获取提交了正确的数据,请有人纠正
我有一个使用 ControlValueAccessor 的带有子表单的表单 profile-form.component.ts form: FormGroup; this.form = this.fo
一旦像这样加载组件,我就会尝试将值修补到初始化的 FormGroup 中(其中 editForm 是 FormGroup,editInfo 是包含我想要修补到表单中的信息的 JSON): Object
在我的 Angular 7 应用程序中,我使用 react 形式的 Angular Material 组件 mat-select。 View 看起来像这样:
我正在使用表单生成器构建响应式(Reactive)表单。表单数据需要动态更新。为了实现这一目标,我创建了一个函数,该函数迭代对象中的键并使用匹配的键名称修补表单值。这在大多数情况下都有效,但是,生成的
我有一个基于 Angular 文档的动态表单,我有一个功能可以让用户加载他们保存的表单。目前我可以修补其他表单字段的值,如文本字段和单选按钮,但我不能在数组上这样做,因为它的值是一个数组。 我有以下代
我希望在用户在创建的空控件中添加值后更新 formArray。 目前,当用户选择添加一个新项目时,我会使用空值构建到 formArray 上。 buildItem(item?: any, key?:
我尝试通过选择选择框来动态呈现 cat_name。但我无法使用 patchValue 渲染 cat_name。下面是我呈现子 formArray 的代码。 通过使用更改事件选择选择框,我得到了基于值的
我在 Angular 6 中创建编辑表单。 当我加载页面时,它使用以下代码设置值: this.editFG.patchValue({ productTitle: [data.productTitl
我有一个多步骤表单,用户可以在其中来回遍历表单。我将表单数据保存在服务中,当他回来时,我使用 patchValue 将所有数据修补到表单中。我也尝试了 setValue,但表单字段未标记为脏或已触及。
我是一名优秀的程序员,十分优秀!