Angular 2 Dynamic Forms:如何创建依赖下拉菜单

问题描述:

我通过参考Angular 2 Dynamic FormsAngular 2 Dynamic Forms:如何创建依赖下拉菜单

创建动态表单一切正常。但我面临的问题是创建依赖下拉菜单。例如:我想创建一个表单,用户可以使用CountryCityState下拉选择地址。

new DropdownField({ 
    key: 'country', 
    label: 'Country', 
    options: [ 
    {key: 'usa', value: 'USA'}, 
    {key: 'uk', value: 'UK'} 
    ], 
    order: 4 
}), 

new DropdownField({ 
    key: 'state', 
    label: 'State', 
    options: [ 
    {key: 'taxas', value: 'taxas'}, 
    {key: 'detroit', value: 'detroit'} 
    ], 
    order: 5 
}), 

new DropdownField({ 
    key: 'city', 
    label: 'City', 
    options: [ 
    {key: 'houston', value: 'Houston'}, 
    {key: 'austin', value: 'Austin'} 
    ], 
    order: 5 
}) 

编辑:以下是模板。

<div class="form-group" [formGroup]="form"> 
    <label [attr.for]="field.key" class="control-label">{{field.label}}</label> 
    <div [ngSwitch]="field.controlType"> 
    <input *ngSwitchCase="'textbox'" 
     formControlName="{{field.key}}" 
     [id]="field.key" 
     [type]="field.type" 
     class="form-control" 
     [placeholder]="field.placeholder" 
     [readonly]="field.readonly" 
    > 
    <select [id]="field.key" *ngSwitchCase="'dropdown'" formControlName="{{field.key}}" class="form-control"> 
     <option style="display:none" value="">Choose an option</option> 
     <option *ngFor="let opt of field.options" [value]="opt.key">{{opt.value}}</option> 
    </select> 
    </div> 
    <div style="color: red;" *ngIf="!isValid">({{field.label}} is required)</div> 
</div> 

我想,当用户选择CountryState名单应该得到填充,当用户选择StateCity名单应该得到填充,但全部采用动态表单是。

+0

这里的'DropdownField'是...?我实际上没有看到你在哪里使用反应形式 – smnbbrv

+0

你可以参考问题中提供的Angular 2 Dynamic Forms示例链接。 – Shamsher

+0

我已经在那里搜索了'DropdownField',我什么也没找到。请澄清你的问题,并发布你试过的东西 – smnbbrv

这里有一个Plunkr这表明相关的下拉菜单:https://plnkr.co/edit/b5FKSp06XMfQul5pYQti?p=preview

它有一个第一下拉列表中选择一个产品类型(或大或小)的更新显示第二下拉列表中只小型或大型产品。你可以很容易地将这个例子翻译成国家/州/市的依赖下拉菜单。

的Plunkr示出了两种技术来产生用于从属下拉的值:

  • 重新计算由所述第一下拉发射每change事件的值。
  • 将自定义管道应用于相关下拉列表的值,以便它们自动绑定到&,并按第一个下拉列表的值进行过滤。
+0

一个问题: 'productsAfterChangeEvent = []; productForm:ControlGroup;' ControlGroup在哪里申报?我已经将它更改为“FormGroup”,它工作。这是在fb.group的构造函数中返回的类型。谢谢! –

+0

不知道。这可能是一个错字,它应该是'FormGroup.';) – AngularChef