我尝试制作一个动态表单(这样你就可以无限制地将项目添加到列表中),但不知何故我的列表内容没有得到发送,因为它无法找到带路径的控件:
Cannot find control with path: ‘list_items -> list_item’
我的组件:
- @Component({
- selector: 'app-list',templateUrl: './list.component.html',styleUrls: ['./list.component.css']
- })
- export class ListComponent implements OnInit {
- listForm: FormGroup;
- constructor(private nodeService: NodeService,private messageService: MessageService,private fb: FormBuilder,private listService: ListService) {
- this.listForm = this.fb.group({
- title: ['',[Validators.required,Validators.minLength(5)]],list_items: this.fb.array([
- this.initListItem(),])
- });
- }
- initListItem() {
- return this.fb.group({
- list_item: ['']
- });
- }
- initListItemType() {
- return this.fb.group({
- list_item_type: ['']
- });
- }
- addListItem() {
- const control = <FormArray>this.listForm.controls['list_items'];
- control.push(this.initListItem());
- }
模板(list.component.html):
- <h2>Add List </h2>
- <form [formGroup]="listForm" novalidate (ngSubmit)="addList(listForm)">
- <div class="form-group">
- <input type="text" class="form-control" formControlName="title" placeholder="Title">
- </div>
- <div formArrayName="list_items">
- <div *ngFor="let list_item of listForm.controls.list_items.controls; let i=index" class="panel panel-default">
- {{i + 1}}.) <input type="text" formControlName="list_item" placeholder="List Item" class="form-control">
- </div>
- <a (click)="addListItem()">Add List Item +</a>
- </div>
- <button type="submit">Submit</button>
- </form>
标题工作正常,但我找不到我对“formControlName”的错误,这导致错误.
在此问题上提前感谢您的任何帮助.
更新我改变的内容
list.component.html
- <h2>Add List </h2>
- <form [formGroup]="listForm" novalidate (ngSubmit)="addList(listForm)">
- <div class="form-group">
- <input type="text" class="form-control" formControlName="title" placeholder="Title">
- </div>
- <div formArrayName="list_items">
- <div *ngFor="let list_item of listForm.controls.list_items.controls; let i=index" class="panel panel-default">
- {{i + 1}}.) <input type="text" formControlName="{{i}}" placeholder="List Item" class="form-control">
- </div>
- <a (click)="addListItem()">Add List Item +</a>
- </div>
- <button type="submit">Submit</button>
- </form>
在我的组件中,我更改了构造函数和我的addListItem方法:
- listForm: FormGroup;
- constructor(private nodeService: NodeService,list_items: this.fb.array([
- [''],])
- });
- }
- addListItem() {
- const control = <FormArray>this.listForm.controls['list_items'];
- control.push(this.fb.control(['']));
- console.log(control)
- }
应该以html格式映射formControlName&你的组件文件.
- <div *ngFor="let list_item of [0,1,2]; let i=index" class="panel panel-default">
- {{i + 1}}.) <input type="text" formControlName='{{i}}' placeholder="List Item" class="form-control">
- </div>
============
- list_items: this.fb.array([
- [''],//0 points to this
- [''],//1 points to this
- [''] //2 points to this
- ])