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

Posted

技术标签:

【中文标题】使用Angular 4根据第一个下拉列表选择第二个下拉列表【英文标题】:Select second dropdown based on first dropdown using Angular 4 【发布时间】:2018-09-21 02:31:39 【问题描述】:

我有两个使用来自服务器的数据填充的下拉列表。第一个下拉列表包含一个州,第二个包含城市。就像我选择一个州名一样,只有该州的城市应该使用 Angular 4 在第二个下拉菜单中显示。

<mat-tab-group>
                <mat-tab label="Basic Info">
                    <ng-template mat-tab-label>
                        <div fxLayout="center center">
                            <mat-icon style="font-size: 16px; line-height: 18px">gps_fixed</mat-icon>
                           State
                        </div>                           
                    </ng-template><br /><br /><br /><br />
                    <div class="ui fluid container" fusePerfectScrollbar>
                        <div class="content">
                            <mat-form-field>
                                <mat-select placeholder="State" [(ngModel)]="selectedValue" name="state" (change)="dropdownchange($event.target.value)">
                                  <mat-option>None</mat-option>
                                  <mat-option *ngFor="let state of states" [value]="state">state</mat-option>
                                </mat-select>
                              </mat-form-field><br />
                              <h3>You selected: selectedValue</h3>
                        </div>
                    </div>
                </mat-tab>
                <mat-tab label="Location">
                    <ng-template mat-tab-label>
                        <div fxLayout="center center">
                            <mat-icon style="font-size: 16px; line-height: 18px">location_on</mat-icon>
                            City
                        </div>
                    </ng-template>
                    <div class="ui fluid container" fusePerfectScrollbar>
                        <div class="ui fluid container" fusePerfectScrollbar>
                            <div class="content">
                                <mat-form-field>
                                    <mat-select placeholder="City">
                                      <mat-option>None</mat-option>
                                      <mat-option *ngFor="let cities of city" [value]="state">cities</mat-option>
                                    </mat-select>
                                  </mat-form-field><br />

                            </div>
                        </div>
                    </div>
                </mat-tab>
   </mat-tab-group>

【问题讨论】:

希望对您有所帮助plnkr.co/edit/ctWfT7rnWw2RaSW063TJ?p=preview 我想在角材料中使用它 【参考方案1】:

app.component.ts

import  Component  from '@angular/core';

@Component(
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
)
export class AppComponent 
  private map = new Map<string, string[]>([
    ['Poland', ['Warszawa', 'Krakow']],
    ['USA', ['New York', 'Austin']],
  ])

  country: string;
  city: string;

  get countries(): string[] 
    return Array.from(this.map.keys());
  

  get cities(): string[] | undefined 
    return this.map.get(this.country);
  


app.component.html

<select [(ngModel)]="country">
  <option *ngFor="let country of countries" [value]="country">  country  </option>
</select>

<select *ngIf="country" [(ngModel)]="city" [value]="city">
  <option *ngFor="let city of cities">  city  </option>
</select>

Live demo

在您的情况下,您需要对上面的示例进行更改,即使用服务器中的数据填充国家/城市地图。

【讨论】:

你能用角材料吗 只需将&lt;select&gt; 更改为&lt;mat-select&gt; 并将&lt;option&gt; 更改为&lt;mat-option&gt; 我试过了,但选择第一个下拉菜单后,第二个下拉菜单没有显示 添加[value]绑定到&lt;mat-option&gt; 【参考方案2】:

您应该将点击事件添加到您所在州的保管箱中,例如

<mat-option *ngFor="let state of states" (click)="getCities(state)" [value]="state">state</mat-option>

然后将getCities(state:string) 之类的函数添加到您的 .ts 文件中,并使用此函数填充第二个 Dropbox 内容,例如

public cities : string[];
getCities(state:string) 
 this.cities = []; // empty the array first.
 this.cities.push(CITY LIST);

这样,一旦选择了一个州,它的城市就会加载到第二个保管箱中。

希望对您有所帮助。

【讨论】:

如果用户确实使用键盘交互更改了选项怎么办?您可能希望将getCities(state) 绑定到change 事件而不是click

以上是关于使用Angular 4根据第一个下拉列表选择第二个下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?

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

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

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

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

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