实现思路
- 首先,在组件的TypeScript代码中获取表单组和需要监听的表单控件实例。
- 使用
valueChanges
事件来监听特定表单控件的值变化。
- 在值变化的回调函数中,根据当前值决定是否添加或移除另一个表单控件。添加或移除表单控件可以使用表单组的
addControl
和 removeControl
方法。
- 确保在模板中正确绑定表单,以便UI能够反映出表单结构的变化。
关键代码片段
- 组件的TypeScript代码
import { Component } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
@Component({
selector: 'app-dynamic-form',
templateUrl: './dynamic-form.component.html',
styleUrls: ['./dynamic-form.component.css']
})
export class DynamicFormComponent {
myForm: FormGroup;
constructor() {
this.myForm = new FormGroup({
controlToWatch: new FormControl('', Validators.required),
// 初始时可能不存在要动态添加/移除的控件
});
const controlToWatch = this.myForm.get('controlToWatch');
controlToWatch.valueChanges.subscribe((value) => {
const dynamicControl = this.myForm.get('dynamicControl');
if (value === 'someValue') {
if (!dynamicControl) {
this.myForm.addControl('dynamicControl', new FormControl('', Validators.required));
}
} else {
if (dynamicControl) {
this.myForm.removeControl('dynamicControl');
}
}
});
}
}
- 组件的HTML模板代码
<form [formGroup]="myForm">
<input formControlName="controlToWatch" placeholder="输入值以触发动态变化">
<!-- 动态表单控件 -->
<input formControlName="dynamicControl" *ngIf="myForm.get('dynamicControl')" placeholder="动态添加/移除的控件">
<button type="submit" [disabled]="!myForm.valid">提交</button>
</form>