Angular7在一个选择中使用选择的选项来设置另一个选择中的选项

时间:2019-05-12 18:55:33

标签: angular angular-forms

我的Angular 7项目中有以下两个选择元素:

enter image description here

我的要求是根据从第一个选择中选择的值填充第二个选择中的元素。
到目前为止,我已经尝试了以下方法:

  1. 使用ngModel指令获取第一个选定的值
  2. 使用选择的值在第二个select元素中填充项目。

这是代码:
app.component.html:

    <mat-form-field>
    <mat-label>Select Master Bot</mat-label>
    <mat-select [(ngModel)]="selectedMasterBot">
    <mat-option *ngFor="let masterBot of masterBotList" 
    [value]="masterBot.value">{{ masterBot.view }}</mat-option></mat-select> 
    </mat-form-field>&nbsp;
    <mat-form-field>
    <mat-label>Select UseCase</mat-label>
    <mat-select [(ngModel)]="selectedUseCase">
    <mat-option *ngFor="let useCase of 
    masterBotUseCaseMapping.selectedMasterBot" [value]="useCase.value">{{ 
    useCase.view}}
    </mat-option>
    </mat-select>
    </mat-form-field>
    <button mat-button (click)="print()">Click me</button>  

app.component.ts:


    public selectedMasterBot;
    public selectedUseCase;

    public masterBotUseCaseMapping = {
    "select1Value": [
    {
    "view": "incomprehension",
    "value": "incomprehensionID"
    },
    {
    "view": "greetings",
    "value": "greetingsID"
    }
    ], "select2Value": [
    {
    "view": "incomprehension",
    "value": "incomprehensionID"
    }
    ]
    }

    public masterBotList = [{
    view: 'select1',
    value: 'select1Value'
    },
    { 
    view: 'select2',
    value: 'select2Value'
    }]

1 个答案:

答案 0 :(得分:1)

简单使用ngModel可以解决您的级联下拉问题

演示在https://stackblitz.com/edit/angular-cascaded-dropdown

数据中的映射似乎不正确,您需要修复

更新小提琴https://stackblitz.com/edit/angular-wteh9o以支持您的数据结构。

这里的主要问题是您正在尝试访问属性值为dot notation的属性,而您应该使用array notation作为

<mat-option *ngFor="let useCase of 
masterBotUseCaseMapping[selectedMasterBot]" [value]="useCase.value">