微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

html – Angular – 基于用户输入的构建表单

我正在构建一个应该是动态的Web表单.
用户从列表中选择选项时,将根据其输入生成一个表单输入.
例如:
<mat-form-field>
     <mat-select placeholder="Type" [(ngModel)]="row.Type" (change)="TypeChosen(row.Type,row)">
         <mat-option [value]="0">Treatment</mat-option>
         <mat-option [value]="1">Travel</mat-option>
         <mat-option [value]="2">Medication</mat-option>
         <mat-option [value]="3">Equipment</mat-option>
     </mat-select>
</mat-form-field>

如果他选择类型’治疗’,他会得到另一个选择输入,其中包含一些其他输入的选项,如果他选择不同的类型,他会得到不同的选项和其他输入.

我知道我需要动态生成HTML内容,也许是动态组件.
以简单的方式做到这一点的最佳方法是什么?

解决方法

我建议为每个子表单创建一个组件,然后根据所选选项* ng它们,如下所示:
<!-- component.html -->

<mat-form-field>
  <mat-select placeholder="Type" [(ngModel)]="row.Type" (change)="onTypeChosen(row.Type,row)">
    <mat-option [value]="0">Treatment</mat-option>
    <mat-option [value]="1">Travel</mat-option>
    <mat-option [value]="2">Medication</mat-option>
    <mat-option [value]="3">Equipment</mat-option>
  </mat-select>
</mat-form-field>

<my-treatment-component *ngIf="type === 0" [someInput]="'some value'"></my-treatment-component>
<my-travel-component *ngIf="type === 1" [somethingElse]="true"></my-travel-component>
<my-medication-component *ngIf="type === 2" (someOutput)="onMedicationOutput($event)"></my-medication-component>
<my-equipment-component *ngIf="type === 3"></my-equipment-component>

如果您已经拥有类型选择的东西,则可以将其绑定到* ngIfs.如果没有,请在控制器类中创建一个字段,并在其中保留所选类型.

// component.ts

public type: number | null = null;

public onTypeChosen(type: number,row): void {
  this.type = type;
}

如果您的子表单具有可重用的部分(或基本相同,无配置),通常将可重用代码提取到组件中并将它们组合在一起是一种很好的做法.

希望这有所帮助 :-)

原文地址:https://www.jb51.cc/html/227676.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐