当前位置: 首页 > 知识库问答 >
问题:

如何在Angular Reactive Formarray中使级联下拉列表工作而不会弄乱下拉值

梁嘉祥
2023-03-14

在第4张图片、第5张图片和第6张图片上,您可以看到添加选项按钮起作用,但当我在选项2第一个下拉列表中选择一个标准时,它与选项1第二个下拉列表搞砸了,现在它还包含了第二个选项的下拉列表选项

这是我的html代码

<form [formGroup] = "profileForm">

  <h1>Profile Form</h1>

 <div>
  <label for = "first-name-input">First Name</label>
  <input type="text" id="first-name-input" formControlName ="firstNameInput">
</div>
 <div>
    <label for = "last-name-input">Last Name</label>
    <input type="text" id="last-name-input" formControlName ="lastNameInput">
  </div>

  <div formArrayName="optionGroups">

    <div *ngFor="let optionGroup of profileForm.controls['optionGroups'].controls;  let i=index "[formGroup]="optionGroup">


      <h4>Option {{ i + 1 }} </h4>




     <div>
      <label for = "select-input">Criteria</label>
      <select id="select-input" (change)="onSelectSelect($event.target.value, i)"  formControlName ="selectInput">

          <option value="0" disabled selected>Select a Criteria</option>
          <option *ngFor="let select of selects"  [value]= "select.name">{{select.id}}</option>


        </select>

        <label for = "where-input">Option</label>
        <select id="where-input" formControlName ="whereInput">
  
            <option value="0" disabled selected>Select a Option</option>
            <option *ngFor="let where of wheres" value= {{where.name}}>{{where.id}}</option>


          </select>

          <button type ="button" (click)="removeOptionGroup(i)">X</button>

         


     </div>

    </div>

   </div>
   <button type ="button" (click)="addOptionGroup()">Add Options</button>
   <div>

    <button type ="button" (click)="saveProfileForm()">Send </button>

   

   </div>

</form>

这是我的组件文件

export class PowComponent {

 selects: Select[];
 wheres: Where[];


 public profileForm : FormGroup;

 public addOptionGroup(){

 const fa = this.profileForm.controls["optionGroups"] as FormArray;

  fa.push(this.newOptionGroup());

  }

  public removeOptionGroup(index: number){

   const fa = this.profileForm.controls["optionGroups"] as FormArray;

    fa.removeAt(index);

   }


   public saveProfileForm(){

    console.log(this.profileForm.value);
   }



   constructor(public router: Router,  public dropdownqueryservice:    DropDownQueryService , private fb : FormBuilder) {
    this.profileForm = this.fb.group({

        firstNameInput : [ "" ],
        lastNameInput : [ "" ],
        optionGroups : this.fb.array([
            this.fb.group({

              selectInput : [ "" ],
              whereInput : [ "" ],

          }),
       ]),
    });

    this.selects = this.dropdownqueryservice.getSelect();
    this.wheres=[];

}

onSelectSelect(selectid, i) {
    this.wheres = this.dropdownqueryservice.getWhere().filter((item)=> item.selectid == selectid);

  }


 private newOptionGroup() {
  return new FormGroup({

      selectInput: new FormControl(""),
      whereInput: new FormControl(""),

  });
   }

  }

共有1个答案

梁浩
2023-03-14

正如我之前在评论中提到的,问题来自多个选择表单的唯一selects数组。

您必须创建Select的数组数组,其中包含每个选择值的可能条件数组。

这里有一个stackblitz解决方案建议,我做了一些修改以保持简单并使其工作。如果您想更明确地表达您的担忧,请随意进行分叉和编辑。

 类似资料:
  • 问题内容: 我有以下问题: 我开始用HTML和JS创建表单,并且有两个下拉菜单(国家和城市)。现在,我想使用JQuery使这两个动态,以便仅显示所选国家/地区的城市。 我从一些基本的JS入手,但效果不错,但在IE中却有些麻烦。现在,我正在尝试将JS转换为JQuery,以获得更好的兼容性。 我原来的JS看起来像这样: 我知道这很简单,但是我看不到树木的木头。 问题答案: 它应该像

  • 我正在rails中使用引导下拉列表,它突然停止工作。如果我像它工作正常,但如果我真的单击它,什么也不会发生。 如果我使用jQuery附加了一个单击处理程序,如,然后当我单击链接时触发。 这是不是因为事件被什么东西吞没了?有没有办法弄清楚这是什么? 我不能在jsFiddle类型的环境中重现错误,但这里是相关的html: 更新:我发现如果我调用页面加载几秒钟后,它就可以工作了,但如果我在页面加载时正确

  • 问题内容: 我的数据库包含国家和城市。 第一种情况-成功完成: 国家列表在页面加载的下拉框中填充 城市列表将在页面加载的下拉框中填充-填充的城市列表基于默认国家/地区。 第二种情况-无法成功: 用户更改国家 城市列表将根据所选国家/地区更改 我知道我必须使用jQuery / Ajax。我尝试过,但是由于缺乏编程经验,我无法解决问题。我的列表是从数据库而不是XML获取的。我只需要一个快速的解决方案,

  • 我试图手动控制级联剑道下拉列表。我将一个“级联”事件绑定到父级,触发后,转到我的服务器获取与父级dropdownlist值关联的子dropdownlist值,并尝试更新子数据源:

  • 我正在创建一个带有jQuery和toggle功能的下拉列表,因为我希望选择器可以通过自定义滚动条显示的下拉选项进行单击。 到目前为止,我有一些这样的代码:JSFiddle 单击div时,将显示具有各种选项的下拉菜单,同时,单击/切换选择器时,选择器上的箭头将从下变为上。当鼠标悬停在选项上时,选项的背景色将变为灰色。 我的预期结果应该是这样的: 但是我不能将下拉菜单从-9000px推到0px以显示它

  • 问题内容: 我必须制作一个带有多个互相修改的下拉菜单的表单。菜单/数据库表是: 类别,样式,类型和机制 我尝试使用有限的Ajax知识来执行此操作,但是似乎只能访问一次MySQL(在初始页上)以填充Categories表,而后无法通过查询下一组结果来更新Styles表。我收到一个错误,声称数据库为空。 我还尝试通过选项组填充下拉列表,以使用循环查询来处理“类别”和“样式”,但是仅显示“类别”标题,而