首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ControlValueAccessor与FormArray成角

ControlValueAccessor与FormArray成角
EN

Stack Overflow用户
提问于 2020-10-29 13:25:13
回答 2查看 1.1K关注 0票数 0

如何将formArray传递给子项目组件?

项目组件没有一个does组(在父级中定义),我得到了一个错误:Error: formArrayName must be used with a parent formGroup directive

ParentComponent

  • ListComponent
    • ListItemComponent

代码语言:javascript
复制
// structure:
form = new FormGroup({
    articles: new FormArray([])
}
代码语言:javascript
复制
<articles-list [articles]="articles" formArrayName="articles"></articles-list>
代码语言:javascript
复制
<article [formControlName]="article.id" *ngFor="let article of articles" [article]="article"></article>

表格结构应是:

代码语言:javascript
复制
parent {
 articlesList: article[]
}
EN

回答 2

Stack Overflow用户

发布于 2020-10-29 14:15:52

确保在[formGroup]中嵌套您的文章列表组件。

代码语言:javascript
复制
<form [formGroup]="form">
    <articles-list [articles]="articles" formArrayName="articles">
    </articles-list>
</form>

    
<!-- You can try something like this - just incorporate your custom components ->
<form [formGroup]="form">
    <div formArrayName="articles">
        <div *ngFor="let child of form.controls.articles.controls; let i=index;">
            <div class="form-group stagger" formGroupName="{{i}}">
                <input formControlName="sampleField" />
            </div>
        </div>
    </div>
</form>
票数 1
EN

Stack Overflow用户

发布于 2020-10-29 14:36:42

当将FormControl/或FormArray传递给组件时,组件可以实现ControlValueAssesor -the类似于另一个输入,或者我们可以传递FormControl/FormArray -nor formArray名称。

当我们使用FormArray时,建议在.ts中使用getter

代码语言:javascript
复制
articlesFormArray get()
{
    return this.form.get('articles') as FormArray
}

因此,您可以将formArray作为参数传递

代码语言:javascript
复制
<articles-list [myFormArray]="articlesFormArray"></articles-list>

在文章中--清单

代码语言:javascript
复制
@Input() myFormArray:FormArray

//create a new getter to get the FormGroup of the formArray, 
get formGroup(i)
{
    return myFormArray.at(i) as FormGroup
}

<div *ngFor="let control of myFormArray.controls;let i=index">
     <div [formGroup]="formGroup(i)">
          <input formControlName="articleId">
     </div>
</div>

我们的子程序是否是FormGroup,您可以传递formGroup,在子组件之前的示例中可以这样做。

代码语言:javascript
复制
@Input('group') form:FormGroup //<--the name is group, but the variable "form"
                               //it's only show a characteristic of Inputs
<div [formGroup]="form">
  <input formControlName="articleId">
</div>

我们可以替换文章中的使用-list.html。

代码语言:javascript
复制
<div *ngFor="let control of myFormArray.controls;let i=index">
     <children-component [group]="formGroup(i)">
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64592038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档