在 Angular 中动态创建控件时不呈现 formControlName
formControlName is not rendered when creating control dynamically in Angular
我正在努力创建一个表单,该表单将具有通过 API 提供的呈现控件。表单呈现没有任何问题。但是 formControlName
属性 在呈现时从 HTML 中丢失。这会导致 mat-datepicker
出现问题。因为它需要 formControlName
与控件相关联
这是我的模板
<div *ngFor="let item of list; let i=index;">
<mat-form-field appearance="fill">
<mat-label>{{item.control["Caption"]}}</mat-label>
<input *ngIf="(item.control['Type'] == "Text")" matInput formControlName="{{item.key}}" >
<input *ngIf="item.control['Type'] == 'Date'" matInput [matDatepicker]="i" placeholder="DD/MM/YYYY" [formControlName]="item.key" >
<mat-datepicker-toggle *ngIf="item.control['Type'] == 'Date'" matSuffix [for]="i"></mat-datepicker-toggle>
<mat-datepicker *ngIf="item.control['Type'] == 'Date'" #i></mat-datepicker>
</mat-form-field>
</div>
</form>
现在的问题是日期控件已呈现,但在单击控件上的日历图标时不会出现日历弹出窗口。但是,如果我在控件中手动输入日期,则它会正确提交。
我在这里错过了什么。我需要能够将 mat-datepicker
与呈现的所有日期控件绑定。
像这样更新您的模板:
<div *ngFor="let item of list; let i=index">
<mat-form-field appearance="fill">
<mat-label>{{item.control["Caption"]}}</mat-label>
<input *ngIf="item.control['Type'] == 'Text'" matInput [formControlName]="item.key" >
<ng-container *ngIf="item.control['Type'] == 'Date'">
<input matInput [matDatepicker]="i" placeholder="DD/MM/YYYY" [formControlName]="item.key" >
<mat-datepicker-toggle matSuffix [for]="i"></mat-datepicker-toggle>
<mat-datepicker #i></mat-datepicker>
</ng-container>
</mat-form-field>
</div>
这里我使用了ng-container
因为它不会在DOM中添加额外的标签,你也可以在这里使用div
但那样会在[=中添加新标签19=]。您可以检查元素并查看差异。
您可以阅读更多关于 ng-container
here
我正在努力创建一个表单,该表单将具有通过 API 提供的呈现控件。表单呈现没有任何问题。但是 formControlName
属性 在呈现时从 HTML 中丢失。这会导致 mat-datepicker
出现问题。因为它需要 formControlName
与控件相关联
这是我的模板
<div *ngFor="let item of list; let i=index;">
<mat-form-field appearance="fill">
<mat-label>{{item.control["Caption"]}}</mat-label>
<input *ngIf="(item.control['Type'] == "Text")" matInput formControlName="{{item.key}}" >
<input *ngIf="item.control['Type'] == 'Date'" matInput [matDatepicker]="i" placeholder="DD/MM/YYYY" [formControlName]="item.key" >
<mat-datepicker-toggle *ngIf="item.control['Type'] == 'Date'" matSuffix [for]="i"></mat-datepicker-toggle>
<mat-datepicker *ngIf="item.control['Type'] == 'Date'" #i></mat-datepicker>
</mat-form-field>
</div>
</form>
现在的问题是日期控件已呈现,但在单击控件上的日历图标时不会出现日历弹出窗口。但是,如果我在控件中手动输入日期,则它会正确提交。
我在这里错过了什么。我需要能够将 mat-datepicker
与呈现的所有日期控件绑定。
像这样更新您的模板:
<div *ngFor="let item of list; let i=index">
<mat-form-field appearance="fill">
<mat-label>{{item.control["Caption"]}}</mat-label>
<input *ngIf="item.control['Type'] == 'Text'" matInput [formControlName]="item.key" >
<ng-container *ngIf="item.control['Type'] == 'Date'">
<input matInput [matDatepicker]="i" placeholder="DD/MM/YYYY" [formControlName]="item.key" >
<mat-datepicker-toggle matSuffix [for]="i"></mat-datepicker-toggle>
<mat-datepicker #i></mat-datepicker>
</ng-container>
</mat-form-field>
</div>
这里我使用了ng-container
因为它不会在DOM中添加额外的标签,你也可以在这里使用div
但那样会在[=中添加新标签19=]。您可以检查元素并查看差异。
您可以阅读更多关于 ng-container
here