Я пытаюсь разделить Угловой материал mat-step
(из mat-horizontal-stepper
) на отдельные вложенные компоненты подформ и получить ExpressionChangedAfterItHasBeenCheckedError
относительно достоверности формы.
Этот стек показывает, что проблема: https://stackblitz.com/edit/mat-stepper-components
Вложенные компоненты находятся на первом этапе.
Интересно, что проблема не возникает, если существует только один уровень вложенности (если у шагов нет вложенных подформ), как показано на втором шаге.
Вот основные части кода:
создать-profile.component.html
<mat-horizontal-stepper [linear]=true #stepper>
<mat-step [stepControl]="frmStepOne">
<ng-template matStepLabel>Step One Details</ng-template>
<form [formGroup]="frmStepOne"><ng-template matStepLabel>Step One</ng-template>
<step-one-component></step-one-component>
</form>
</mat-step>
<mat-step [stepControl]="frmStepTwo">
<ng-template matStepLabel>Step Two Details</ng-template>
<form [formGroup]="frmStepTwo">
<step-two-component></step-two-component>
</form>
</mat-step>
</mat-horizontal-stepper>
создать-profile.component.ts
//...
constructor(private fb: FormBuilder) {
this.frmStepOne = new FormGroup({});
this.frmStepTwo = new FormGroup({});
}
шаг one.component.html
<step-one-child-one></step-one-child-one>
шаг one.component.ts
// nothing interesting, just component boilerplate
шаг один-ребенок-one.component.html
<mat-form-field>
<input matInput formControlName="name" placeholder="Name" required>
</mat-form-field>
шаг один-ребенок-one.component.ts
@Component({
selector: 'step-one-child-one',
templateUrl: './step-one-child-one.component.html',
viewProviders: [
{
provide: ControlContainer,
useExisting: FormGroupDirective
}
]
})
export class StepOneChildOneComponent {
constructor(private parent: FormGroupDirective) {
}
ngOnInit() {
this.parent.form.addControl('name', new FormControl('', [Validators.required]));
}
}