我们可以使用ControlContainer向父 FormGroup 注册子表单,而不是使用 CVA 使用子表单组件方法来创建应用程序内容表单。
在子组件中注入 ControlContainer 提供对父 FormGroup 的访问,然后我们可以使用addControl方法添加所需的表单控件。
内容.component.ts
import { Component, forwardRef, OnInit } from '@angular/core';
import { AbstractControl, ControlContainer, ControlValueAccessor, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validators } from '@angular/forms';
@Component({
selector: 'app-content',
templateUrl: './content.component.html',
styleUrls: ['./content.component.scss']
})
export class ContentComponent implements OnInit {
parent:FormGroup;
constructor(private controlContainer:ControlContainer) { }
ngOnInit(): void {
this.parent = this.controlContainer.control as FormGroup;
this.parent.addControl('contentInfoForm',new FormGroup({
contentNotes: new FormControl("",[Validators.required]),
contentData: new FormControl("", [Validators.required])
}));
}
}
组件.html
<ng-container *ngIf="parent" [formGroup]="parent">
<ng-container formGroupName="contentInfoForm">
<div class="row">
<label for="Content Notes"> Content Notes </label>
<input type="text" formControlName="contentNotes" class="">
</div>
<div class="row">
<label for="Content Data"> Content Data </label>
<input type="text" formControlName="contentData" class="">
</div>
</ng-container>
</ng-container>
分叉的工作示例