您可以使用ngModel-Forms 以最简单的方式完成此操作,或者使用RectiveForms 和FormArray 以简单的方式完成。
您可以在此处找到有关 ReactiveForms 的更多信息:https://angular.io/guide/reactive-forms
这是一个简单的解决方案示例,ngModel here 是一个工作示例:
第 1 步:声明一个 TextField 类型数组
editAuthors: any[] = [];
第 2 步:转换作者数组
ngOnInit() {
this.bookModel.authors.forEach((author, index) => {
this.editAuthors.push({ key: 'author'+index, value: author });
});
}
填写新的editAuthors-Array,用于创建表单元素。
第 3 步:添加按钮的功能
addNewTextField(index: number) {
const newTextField: TextField = {
key: 'textfield' + index,
value: ''
}
this.textfields.push(newTextField);
}
您可以在此处设置新文本字段的默认值。
第 4 步:提交表单
在这一步中,您应该从 editAuthors-Array 获取值并将其推送到您的 bookModel.authors-Array。
showModel() {
this.editAuthors.forEach((author, index) => {
this.bookModel.authors[index] = author.value;
});
// do something with new model
}
第 5 步:模板
<div>
<label>Book Tiitle</label>
<input type="text" name="bookTitle" [(ngModel)]="bookModel.title" />
</div>
<div *ngFor="let author of editAuthors;">
<label>Author</label>
<input type="text" [(ngModel)]="author.value" [name]="author.key" />
</div>
<button (click)="addNewAuthor()">Add new Author</button>
<button type="submit" (click)="showModel()">Submit</button>
遍历editAuthors。比使用name-attribute 和[(ngModel)] 创建inputs。使用author.value 将数据绑定到表单元素。使用author.key 添加唯一的name-属性。
完整的 TS 文件
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
bookModel = {
id: 1,
title: 'Book 1',
authors: [
'Author 1',
'Author 2',
'Author 3'
]
};
editAuthors: any[] = [];
ngOnInit() {
this.bookModel.authors.forEach((author, index) => {
this.editAuthors.push({ key: 'author'+index, value: author });
});
}
addNewAuthor() {
this.editAuthors.push({ key: 'author'+this.editAuthors.length+1, value: '' });
}
showModel() {
this.editAuthors.forEach((author, index) => {
this.bookModel.authors[index] = author.value;
});
console.log(this.bookModel);
}
}