根据另一个下拉菜单更改下拉选项 angular

Change dropdown options based on another dropdown angular

我在一个预订网站上工作,我有两个 select 下拉框,其中有 3 个相同的城市名称。根据第一个下拉列表中的选择,我希望第二个以不可能具有相等值的方式进行调整。

HTML:

<h4>Airport of Departure</h4>
    <select name="" id="">
      <option [value]="city" *ngFor="let city of opts">
        {{city.key}}
      </option>
    </select>

    <!-- chosen destination -->

    <h4>Destination (must be different than departure location)</h4>
    <select name="" id="">
      <option [value]="city" *ngFor="let city of opts">
        {{ city.key }}
      </option>
    </select>

COMPONENT.TS:

public cities = ["Warsaw", "Paris", "New York"];
  public opts = [
    { key: "Warsaw", value: ["paris,new york"] },
    { key: "Paris", value: ["warsaw,new york"] },
    { key: "New York", value: ["warsaw, paris,"] }
  ];

STACKBLITZ:https://stackblitz.com/edit/flight-date-pikcer

我无法找到完成这项工作的方法。感谢您的支持!

将第一个下拉列表绑定到 属性 出发点

<h4>Airport of Departure</h4>
    <select name="" id="" [(ngModel)] = "departure">
      <option [value]="city.key" *ngFor="let city of opts">
        {{city.key}}
      </option>
    </select>

在打字稿中

public departure: string;

对于第二个下拉菜单:-

<h4>Destination (must be different than departure location)</h4>
    <select name="" id="">
      <ng-container *ngFor="let city of opts">
      <option [value]="city.key" *ngIf="city.key !== departure" >
        {{ city.key }}
      </option>
      </ng-container>
    </select>

Demo 没有规定所有飞机都从一个目的地飞到任何地方,而不是使用值比使用键更好。

您可以在第二个下拉菜单中使用自定义管道,以区分大小写检查值数组然后对其进行过滤

在html中只给第一个下拉列表一个[(ngModel)]双向绑定

第二个html使用管道

 <option [value]="city.key" *ngFor="let city of opts | departure : dept">

您的自定义管道

import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
      name: "departure"
})
export class DeparturePipe implements PipeTransform {
   transform(value: any[], dept:string): any {
     return value.filter(x=> !dept || x.value[0].split(",").indexOf( dept.toLowerCase())>-1 )
   }
}

如果你只有几个元素,你可以使用 [ngValue],但首先你需要改变你的 "options" 就像

public opts = [
    { key: "Warsaw", value: ["paris","new york"] },
    { key: "Paris", value: ["warsaw","new york"] },
    { key: "New York", value: ["warsaw", "paris"] }
  ];

看到该值是一​​个字符串数组,而不是您所拥有的唯一字符串数组(我想是一个拼写错误)。那么你可以使用简单的

<select [(ngModel)]="departure">
      <option [ngValue]="city" *ngFor="let city of opts">
        {{city.key}}
      </option>
</select>

<select >
      <option [value]="city" *ngFor="let city of departure?.value">
        {{ city }}
      </option>
</select>

但是,请注意,"departure" 获取所有对象的值,例如具有值 { key: "Warsaw", value: ["paris","new york"] }