Angular 7:“找不到具有未指定名称属性的控件”
Posted
技术标签:
【中文标题】Angular 7:“找不到具有未指定名称属性的控件”【英文标题】:Angular 7: "Cannot find control with unspecified name attribute" 【发布时间】:2019-07-04 04:31:54 【问题描述】:我正在创建我的第一个 Angular 应用程序,但在开发模式控制台中出现以下错误:
ERROR 错误:“找不到具有未指定名称属性的控件”
错误错误:“找不到带有路径的控件:'items -> name'”
错误错误:“找不到带有路径的控件:'items -> height'”
我已经阅读了几个 SO 答案(例如 this、this this 和 this),但我无法确定我做错了什么,我对 Angular 的缺乏经验也无济于事。
这是我的组件打字稿代码:
import Component, OnInit from '@angular/core';
import FormArray, FormBuilder, FormControl, FormGroup, Validators from '@angular/forms';
@Component(
selector: 'app-pack-input',
templateUrl: './pack-input.component.html',
styleUrls: ['./pack-input.component.css']
)
export class PackInputComponent implements OnInit
public boxForm: FormGroup;
constructor(private formBuilder: FormBuilder)
ngOnInit()
this.boxForm = this.formBuilder.group(
items: this.formBuilder.array([this.createBox()])
);
createBox(): FormGroup
return this.formBuilder.group(
name: ['', [Validators.required, Validators.minLength(3)]],
height: ['', [Validators.required, Validators.minLength(3)]],
width: ['', [Validators.required, Validators.minLength(3)]],
length: ['', [Validators.required, Validators.minLength(3)]],
weight: ['', [Validators.required, Validators.minLength(3)]]
);
get items(): FormArray
return this.boxForm.get('items') as FormArray;
addItem(): void
this.items.push(this.createBox());
public onSubmit(formValue: any)
console.log(formValue);
这是我的html组件代码:
<div>
<div class="row">
<h3>Set the box size in meters</h3>
</div>
<form [formGroup]="boxForm" (ngSubmit)="onSubmit(boxForm.value)" >
<div class="row" formArrayName="items" *ngFor="let item of items.controls; let i = index;" [formGroupName]="i" style="margin-bottom: 10px">
<div class="form-group">
<div class="col-sm-5 form-group">
<label for="name">Name</label>
<input class="form-control" type="text" formControlName="name" placeholder="Name" />
</div>
<div class="col-sm-3 form-group">
<label for="name">Height</label>
<input class="form-control" type="text" formControlName="height" placeholder="Height" />
</div>
<div class="col-sm-3 form-group">
<label for="name">Width</label>
<input class="form-control" type="text" formControlName="width" placeholder="Width" />
</div>
<div class="col-sm-3 form-group">
<label for="name">Length</label>
<input class="form-control" type="text" formControlName="length" placeholder="Length"/>
</div>
<div class="col-sm-3 form-group">
<label for="name">Weight</label>
<input class="form-control" type="text" formControlName="weight" placeholder="Weight" />
</div>
<hr>
</div>
</div>
<button class="btn btn-success" type="submit" style="margin-right: 10px">Pack</button>
<button class="btn btn-primary" type="button" (click)="addItem()">New Box</button>
</form>
</div>
我在打字稿代码中的formControlName="name"
和formControlName="height"
中没有看到拼写错误。我完全迷路了。
我在这里做错了什么?
【问题讨论】:
【参考方案1】:你不应该在同一个元素上使用 FormArrayName 和 FormGroupName:
<div class="row" formArrayName="items" *ngFor="let item of items.controls; let i = index;">
<div class="form-group" [formGroupName]="i" >
Ng-run Example
【讨论】:
感谢您提醒我 ng-run(那个朋友做得很好!):) 谢谢,让我免于发疯 :)) 我做了类似的事情,我有它喜欢 model ,但直到我看到这个解决方案才知道我的 formarrayname 在父元素上【参考方案2】:尝试将您的 formGroupName 声明更下一层,如下所示:
<div>
<div class="row">
<h3>Set the box size in meters</h3>
</div>
<form [formGroup]="boxForm" (ngSubmit)="onSubmit(boxForm.value)" >
<div class="row" formArrayName="items" *ngFor="let item of items.controls; let i = index;" style="margin-bottom: 10px">
<div class="form-group" [formGroupName]="i">
<div class="col-sm-5 form-group">
<label for="name">Name</label>
<input class="form-control" type="text" formControlName="name" placeholder="Name" />
</div>
<div class="col-sm-3 form-group">
<label for="name">Height</label>
<input class="form-control" type="text" formControlName="height" placeholder="Height" />
</div>
<div class="col-sm-3 form-group">
<label for="name">Width</label>
<input class="form-control" type="text" formControlName="width" placeholder="Width" />
</div>
<div class="col-sm-3 form-group">
<label for="name">Length</label>
<input class="form-control" type="text" formControlName="length" placeholder="Length"/>
</div>
<div class="col-sm-3 form-group">
<label for="name">Weight</label>
<input class="form-control" type="text" formControlName="weight" placeholder="Weight" />
</div>
<hr>
</div>
</div>
<button class="btn btn-success" type="submit" style="margin-right: 10px">Pack</button>
<button class="btn btn-primary" type="button" (click)="addItem()">New Box</button>
</form>
</div>
【讨论】:
以上是关于Angular 7:“找不到具有未指定名称属性的控件”的主要内容,如果未能解决你的问题,请参考以下文章
已安装 Angular 版本 ~7.1.0 想要安装版本 4
升级到 9.0 和 angular 7 后修复 angular-redux/store