【问题标题】:Cannot find control with path: angular2找不到带有路径的控件:angular2
【发布时间】:2017-11-16 08:25:18
【问题描述】:

我正在处理模型驱动的表单,但无法将项目添加到使用 ngFor 显示的列表中。我目前在尝试迭代列表时遇到错误。我尝试了所有可用的解决方案。

错误

找不到带有路径的控件:'categories -> 0'

ts 文件

 private categories : any= [{name: 'Strict',selected : false}, 
                                    {name: 'Moderate',selected : true}, 
                                     {name: 'Flexible',selected : true}];

let allCategories: FormArray = new FormArray([]);
          for (let i = 0; i < this.categories.length; i++) {
            let fg = new FormGroup({});
            fg.addControl(this.categories[i].name, new FormControl(this.categories[i].selected))
            allCategories.push(fg)
          }

表单初始化

类别:所有类别,

HTML部分

<div formArrayName="categories">
          <div *ngFor="let category of categories; let i=index">  
          <span formGroupName="{{i}}">             
            <label>
            <input type="checkbox" formControlName="{{category.name}}"/> 
            {{category.name}} 
            </label>                
          </span>
          </div>
      </div>

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。
  • 几个问题,如果只有3个复选框,为什么还要遍历表单? allCategories 是干什么用的? FormArray 类是什么样的?为什么不直接使用 FormControls 的数组?
  • @jadoon,我正在尝试为我的应用程序实现反应式表单。在提交时,我将 json 格式保存在 mongo 中。现在我想使用 json 构建表单。我在表单数组的迭代中苦苦挣扎。patchValue 仅适用于简单的 json。我想要以下格式的 json 数组之类的补丁
  • 格式 { name : 'Dinesh', dob : '02/04/1991', addresses : [ { line1 : 'line1' }, {line2 : 'line2'}]}.. 你能帮我怎么做?

标签: angular2-forms


【解决方案1】:

@Jadoon,我想,@DineshArun 的意思是他想使用反应式方法列出所有类别,并将 FormArray 与每个类别的 FormGroups 一起使用。 问题是Angular通常默认将数组索引分配为组名0、1 ... 但在@DineshArun 的情况下,这是行不通的。在我的情况下,它也没有,但我找到了解决方案。

首先,查看this 问题,它的标记为答案。以这种方式重写您的 formArray 的填写,然后将您在 patch() 方法中指向的控件的原始名称分配给 formControlName

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 1970-01-01
    • 2017-02-02
    • 2023-03-07
    • 2019-10-16
    • 2020-06-25
    • 1970-01-01
    • 2019-04-02
    • 2017-10-28
    相关资源
    最近更新 更多