如何使自定义表单控件可选地支持 Material?
How can I make a custom form control optionally support Material?
我在 Angular 中构建了一个名为 DimensionInputComponent 的组件,旨在用作表单中的自定义表单控件。该组件具有一些自定义行为,但模板仅包含一个简单的 <input>
元素。
我希望这个组件既可以在普通表单中使用,也可以在使用 Material 的表单中重复使用。在我们的应用程序中,由于各种原因(例如,当只需要一个基本和紧凑的表单时),并非每个表单都使用 Material。
我可以让这个组件可选地支持 Material 设计吗?
目前该组件在不使用 Material 的简单形式下工作正常,如:
<form>
<app-dimension-input [(ngModel)]="myData.dimension"></<app-dimension-input>
</form>
但是,当像这样使用时,它不会自动呈现为 Material 输入:
<form>
<md-input-container>
<app-dimension-input mdInput [(ngModel)]="myData.dimension" placeholder="Dimension"></app-dimension-input>
</md-input-container>
</form>
我相信如果我能以某种方式将 mdInput
属性(如果已设置)转发到组件的 <input>
元素,它会起作用。
我最终解决这个问题的方法是让可重用组件有一个输入开关@Input() private useMaterialDesign = false;
。根据开关的值,组件必须有两个模板,如下所示:
<div *ngIf="useMaterialDesign; then material else normal"></div>
<ng-template #material>
<md-input-container>
<input mdInput [(ngModel)]="myData.dimension" placeholder="Dimension">
</md-input-container>
</ng-template>
<ng-template #normal>
<input [(ngModel)]="myData.dimension" placeholder="Dimension">
</ng-template>
组件现在可以像这样以 Material 形式使用:
<form>
<app-dimension-input [(ngModel)]="myData.dimension" [useMaterialDesign]="true"></<app-dimension-input>
</form>
这不是最优雅的解决方案,所以如果有人有更好的解决方案请分享,我会标记为答案。
我在 Angular 中构建了一个名为 DimensionInputComponent 的组件,旨在用作表单中的自定义表单控件。该组件具有一些自定义行为,但模板仅包含一个简单的 <input>
元素。
我希望这个组件既可以在普通表单中使用,也可以在使用 Material 的表单中重复使用。在我们的应用程序中,由于各种原因(例如,当只需要一个基本和紧凑的表单时),并非每个表单都使用 Material。
我可以让这个组件可选地支持 Material 设计吗?
目前该组件在不使用 Material 的简单形式下工作正常,如:
<form>
<app-dimension-input [(ngModel)]="myData.dimension"></<app-dimension-input>
</form>
但是,当像这样使用时,它不会自动呈现为 Material 输入:
<form>
<md-input-container>
<app-dimension-input mdInput [(ngModel)]="myData.dimension" placeholder="Dimension"></app-dimension-input>
</md-input-container>
</form>
我相信如果我能以某种方式将 mdInput
属性(如果已设置)转发到组件的 <input>
元素,它会起作用。
我最终解决这个问题的方法是让可重用组件有一个输入开关@Input() private useMaterialDesign = false;
。根据开关的值,组件必须有两个模板,如下所示:
<div *ngIf="useMaterialDesign; then material else normal"></div>
<ng-template #material>
<md-input-container>
<input mdInput [(ngModel)]="myData.dimension" placeholder="Dimension">
</md-input-container>
</ng-template>
<ng-template #normal>
<input [(ngModel)]="myData.dimension" placeholder="Dimension">
</ng-template>
组件现在可以像这样以 Material 形式使用:
<form>
<app-dimension-input [(ngModel)]="myData.dimension" [useMaterialDesign]="true"></<app-dimension-input>
</form>
这不是最优雅的解决方案,所以如果有人有更好的解决方案请分享,我会标记为答案。