Я бы предложил вместо использования * ngIf при работе с группой форм использовать ngStyle или ngClass или [hidden] с привязкой свойства.
* Причина, по которой forControlName не работает с ngIf - ngIfполностью удаляет или добавляет блок из html, поэтому переменная не доступна вне ngIf.
Ниже приведен рабочий код с formControlName со скрытым атрибутом,
app. component.html
<button (click)="toggle()"> Toggle LastName of FormControl </button>
<div >
<form [formGroup]="fieldFormGroup">
<input type="text" formControlName="firstName" /> <br /><br />
<input type="text" formControlName="lastName" [hidden]="showBlock" />
</form>
</div>
<div>
{{fieldFormGroup.value | json}}
</div>
или
<input type="text" formControlName="lastName" [style.display]="showBlock ? 'inherit' : 'none'" />
или
<style>
.hide {
display: none;
}
.show {
display: block;
}
</style>
<input type="text" formControlName="lastName" [ngClass]="showBlock ? 'show' : 'hide'" />
app.component.ts
import {Component} из "@ angular / core";
import { FormGroup, FormBuilder } from "@angular/forms";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
public showBlock: boolean = true;
public fieldFormGroup: FormGroup;
constructor(private fb: FormBuilder) {
this.fieldFormGroup = this.fb.group({
firstName: ["pravin"],
lastName: ["patil"]
});
}
public toggle() {
this.showBlock = !this.showBlock;
}
}