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;
}

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

希望这有所帮助 :-)

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些