Это не проблема с mat-box. На самом деле это связано с некоторыми проблемами с логическим c динамического определения formGroup. Проблема может быть исправлена с помощью [hidden]
вместо *ngIf
, чтобы скрыть или показать элемент управления адресом. Таким образом, мы можем go при обычном подходе к реактивной форме. Я не уверен, поможет ли это вам. Рассмотрим это как альтернативное решение:
В HTML:
<mat-dialog-content class="colorOpacity7" [formGroup]="dialogFormGroup">
<div>
<div>
<mat-form-field>
<input matInput type="text" placeholder="Nom" formControlName="name">
</mat-form-field>
</div>
<div>
<mat-checkbox formControlName="RAS">Extend</mat-checkbox>
</div>
</div>
<div [hidden]="!dialogFormGroup.value.RAS">
<div>
<mat-form-field>
<input matInput type="text" placeholder="Adresse" formControlName="adress">
</mat-form-field>
</div>
</div>
</mat-dialog-content>
В TS:
import { Component, OnInit, Inject, HostListener } from "@angular/core";
import {
FormBuilder,
FormGroup,
FormControl,
Validators
} from "@angular/forms";
import { Subscription } from "rxjs";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
public dialogFormGroup: FormGroup;
constructor(private formBuilder: FormBuilder) {}
ngOnInit() {
this.intializeForm();
this.dialogFormGroup.valueChanges.subscribe(data => {
if(!data.RAS) this.dialogFormGroup.value.adress="";
console.log('Form value: ', this.dialogFormGroup.value);
});
}
private intializeForm() {
this.dialogFormGroup = this.formBuilder.group({
name: ["", Validators.required],
RAS: [false],
adress: ["", Validators.required]
});
}
}
Надеюсь, что это сработает. Просьба найти ниже ДЕМО:
https://stackblitz.com/edit/angular-sf-reactive-from-issue?file=src / app / app.component.ts
https://angular-sf-reactive-from-issue.stackblitz.io