Dynamically load multiple dropdown in formarray in angular 6
我要加载两个下拉菜单,一个下拉菜单基于另一个下拉菜单。
我正在使用formarray加载表单值。在我的实际情况中,首先我要在* ngfor循环中使用表单数据(formarray)加载值。下图显示了我的示例场景。
图片简介:名称,年龄,标签类似于标签字段。只有下拉菜单是表格。
首先我使用* ngFor视图中加载值,然后我使用表单数组加载值。
在加载时,它应该加载下拉值。如果我选择第一个下拉菜单。它应该更改第二个下拉值。自我加载时,我使用service在两个下拉列表中加载数据。
component.ts
1 2 3 4 5 6 7 8 9 | this.wholedata.foreach({ x => this.sampleservice.dropdown(x.firstdropdownvalue).subscribe({ this.samplevalue = res; control.push({ dropdownvalue1: x.firstdropdownvalue, dropdownvalue2: x.seconddropdownvalue }) }) }) |
component.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //formarray codes here placed <span>name: {{data.name}}</span> <span>age: {{data.age}}</span> <span>dob: {{data.dob}}</span> <span> <select formControlName="dropdownvalue1" (change)="changevalues($event)"> <option *ngFor="let data of dropdownvalue">{{data.values}}</option> </select> </span> <span> <select formControlName="dropdownvalue2"> <option *ngFor="let data of samplevalue">{{data.values}}</option> </select> </span> <button type="submit" (click)="submitValues()"> |
当前samplevalue变量值加载到最后一个* ngfor循环,因为动态下拉值基于firstdropdown更改每个数组,因此我无法设置该值。
您必须为每个下拉列表使用不同的列表。所以
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //you have a variable"options" options:any; //when you change one drop this.sampleservice.dropdown(x.firstdropdownvalue).subscribe({ //Your response I supouse will be like ["one","two","three"..] (1) //or [{value:1,data:"one"},{value:2,data:"two"}...] (2) this.options[x.firsdropdownvalue]= res; //<--store the res in the object ... }) //So, your dropdowns can be like <span> <select formControlName="dropdownvalue1" (change)="changevalues($event)"> </select> </span> <span> <select formControlName="dropdownvalue2"> <option *ngFor="let data of options[myForm.get('dropdownvalue1').value]"> <!--if your data is like (1) --> {{data}} <!--if your data is like (2) {{data.values}} --> </option> </select> </span> |
如果下拉列表中没有大量项目,则另一个选择是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | options=[ {value:1,data:"one",values:[{value:1,data:"one-one"},{value:2,data:"one-two"},..]}, {value:2,data:"two",values:[{value:1,data:"two-one"},{value:2,data:"two-two"},..]}, ...] // Then you can write <span> <select formControlName="dropdownvalue1"> <option *ngFor="let data of options" [ngValue]="data">{{data.data}}</option> </select> </span> <span> <select formControlName="dropdownvalue2"> <option *ngFor="let data of myForm.get('dropdownvalue1').value.values">{{data.values}}</option> </select> </span> |
但是要小心! dropdownvalue如果一个对象(选择的整个对象)