面试题答案
一键面试- 创建表单结构:
- 在组件的
ts
文件中,导入FormGroup
、FormArray
和FormControl
等相关模块。
import { Component } from '@angular/core'; import { FormGroup, FormArray, FormControl } from '@angular/forms';
- 创建一个
FormGroup
作为整个用户信息表单的容器,并在其中添加一个FormArray
用于存储教育经历。
export class UserInfoComponent { userForm: FormGroup; constructor() { this.userForm = new FormGroup({ education: new FormArray([]) }); } }
- 在组件的
- 定义教育经历表单结构:
- 创建一个方法来生成单个教育经历的
FormGroup
。
createEducationGroup(): FormGroup { return new FormGroup({ schoolName: new FormControl(''), major: new FormControl(''), enrollmentDate: new FormControl(''), graduationDate: new FormControl('') }); }
- 创建一个方法来生成单个教育经历的
- 添加教育经历方法:
- 在组件类中添加一个方法来向
FormArray
中添加新的教育经历FormGroup
。
addEducation() { const educationFormArray = this.userForm.get('education') as FormArray; educationFormArray.push(this.createEducationGroup()); }
- 在组件类中添加一个方法来向
- 移除教育经历方法:
- 再添加一个方法来从
FormArray
中移除指定索引的教育经历FormGroup
。
removeEducation(index: number) { const educationFormArray = this.userForm.get('education') as FormArray; educationFormArray.removeAt(index); }
- 再添加一个方法来从
- 在模板中显示和操作表单:
- 在组件的
html
模板中,使用formGroup
指令绑定到userForm
。
<form [formGroup]="userForm">
- 使用
*ngFor
指令遍历FormArray
中的教育经历FormGroup
,并显示每个教育经历的表单控件。
<div formArrayName="education"> <div *ngFor="let edu of userForm.get('education').controls; let i = index"> <div [formGroupName]="i"> <label for="schoolName{{i}}">School Name:</label> <input type="text" formControlName="schoolName" id="schoolName{{i}}"> <label for="major{{i}}">Major:</label> <input type="text" formControlName="major" id="major{{i}}"> <label for="enrollmentDate{{i}}">Enrollment Date:</label> <input type="text" formControlName="enrollmentDate" id="enrollmentDate{{i}}"> <label for="graduationDate{{i}}">Graduation Date:</label> <input type="text" formControlName="graduationDate" id="graduationDate{{i}}"> <button type="button" (click)="removeEducation(i)">Remove</button> </div> </div> </div>
- 添加一个按钮来调用
addEducation
方法,实现动态添加教育经历。
<button type="button" (click)="addEducation()">Add Education</button> </form>
- 在组件的