如何根据第一个下拉列表的选择过滤第二个下拉列表? - 角

Posted

技术标签:

【中文标题】如何根据第一个下拉列表的选择过滤第二个下拉列表? - 角【英文标题】:How to filter second dropdown based on selection of first dropdown? - Angular 【发布时间】:2018-09-28 17:04:25 【问题描述】:

我有两个如下所示的下拉菜单:

所以我的计划是加载所有子类别,但我想仅在下拉列表中显示与所选类别相关的那些(包含 ParentId 作为所选类别的 Id 的那个)。

这是我的代码:

<!--Category-->

<div class="form-group">
  <label class="control-label dash-control-label col-xs-3">Category:</label>
  <div class="col-xs-9">
    <select class="form-control select2" style="width: 100%;"
            data-minimum-results-for-search="Infinity" name="articleCategory" #articleCategory="ngModel" required [(ngModel)]="article.mainCategory">
      <option disabled [ngValue]="null">-/-</option>
      <option [ngValue]="category" *ngFor="let category of mainGroups">category.title</option>
    </select>
  </div>
</div>

<!--Subcategory-->

<div class="form-group">
  <label class="control-label dash-control-label col-xs-3">Sub category:</label>
  <div class="col-xs-9">
    <select class="form-control select2" style="width: 100%;" name="subCategory" #subCategory="ngModel" required [(ngModel)]="article.subCategory">
      <option disabled [ngValue]="null">-/-</option>
      <option [ngValue]="subcategory" *ngFor="let subcategory of subCategories">subcategory.title</option>
    </select>
  </div>
</div>

如果我需要发布打字稿代码,请告诉我,但这里我从数据库中获取值,这对我来说只是个问题,如何根据类别选择过滤子类别。

谢谢大家 干杯!

【问题讨论】:

这可能会有所帮助,基本上使用changengModelChange ***.com/questions/44840735/… @Ric 我在某处想过 *ngIf="subcategory.parentId = mainCategory.Id" 但我得到一个错误:/ 您可以使用change 事件获取您的类别的值,然后根据您的条件filter 获取您的subCategories 的值 根据 mainCategory 值的变化改变 subCategory。例如。 this.form.get('account_type').valueChanges.subscribe(val => ) 【参考方案1】:

正如一些 cmets 所指出的,聆听您的第一个选择元素的变化,以便使用filter 为您的第二个选择动态生成选项。

类似:

filterSubById(id) 
    return this.subCategories.filter(item => item.parentId === id);

我已经快速创建了一个working demo 来展示如何操作。

编辑

其工作方式是第一次选择的选定值绑定到组件的mainCategory 属性。因此,mainCategory 会根据用户从第一个菜单中选择的内容而变化。第二个选择会根据用户在第一个选择上的选择动态加载选项;这是通过filter 函数完成的,该函数返回subCategories 数组中的所有元素,其parentId 与第一个菜单中所选选项的id 匹配。

【讨论】:

你能解释一下吗,我认为应该在主类别上添加代码,当用户按主类别过滤子类别时,一切正常,但我不明白这是怎么回事:P谢谢 当然,我已经添加了一些 cmets :) 我什么都懂,但我不明白为什么第一个选择会触发 filterSubById 这是第二个选择的一部分,你能告诉我在第一个下拉列表中进行选择导致选择第二个的代码.. Angular 的美妙之处在于我们不必显式调用filterSubByid()。 Angular 足够聪明,可以识别出每当mainCategory 更改时都必须调用该函数,当我们从第一个下拉列表中选择一个选项时,我们实际上是在更改mainCategory @bugs 谢谢它对我有用。您能否详细说明一下第一次下拉调用 filterSubByid() 的更改是如何起作用的?【参考方案2】:

这是一个非常广泛的问题,有许多正确答案。 我会说最好的办法是添加 (change)="filterSubcategories()" 到您的选择元素,这将触发 filterSubcategories() 功能,您可以根据您的 article.mainCategory 选择正确的子类别。

 <!--Category-->

<div class="form-group">
  <label class="control-label dash-control-label col-xs-3">Category:</label>
  <div class="col-xs-9">
    <select class="form-control select2" style="width: 100%;"
            data-minimum-results-for-search="Infinity" (change)="filterSubcategories()" name="articleCategory" #articleCategory="ngModel" required [(ngModel)]="article.mainCategory">
      <option disabled [ngValue]="null">-/-</option>
      <option [ngValue]="category" *ngFor="let category of mainGroups">category.title</option>
    </select>
  </div>
</div>

【讨论】:

以上是关于如何根据第一个下拉列表的选择过滤第二个下拉列表? - 角的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Javascript根据先前的下拉值显示第二个下拉列表

使用Angular 4根据第一个下拉列表选择第二个下拉列表

根据第一个下拉选择填充第二个下拉列表

php 根据第一个下拉选择显示第二个下拉列表(键,值)

根据第一个下拉列表更改第二个下拉列表,并使用 php 和数组更改第二个下拉列表的第三个下拉列表 [关闭]

根据另一个下拉列表中的选择填充一个下拉列表,然后重定向