Вы можете попробовать следующее
Компонент
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
dropdownOne: string;
dropdownTwo: string;
public variables2 = [
{
id: 0,
name: 'a'
},
{
id: 1,
name: 'b'
},
{
id: 2,
name: 'c'
},
{
id: 3,
name: 'd'
}
];
public filteredList5 = this.variables2.slice();
change(e){
}
}
Шаблон
<mat-form-field>
<mat-select [(ngModel)]="dropdownOne" (selectionChange)="change($event)" placeholder="Custom placeholder">
<ng-container *ngFor="let item of filteredList5">
<ng-container *ngIf="item != dropdownTwo">
<mat-option [value]="item">
{{item.name}}
</mat-option>
</ng-container>
</ng-container>
</mat-select>
</mat-form-field>
<br>
<mat-form-field>
<mat-select [(ngModel)]="dropdownTwo" (selectionChange)="change($event)" placeholder="Using array of objects">
<ng-container *ngFor="let item of filteredList5">
<ng-container *ngIf="item != dropdownOne">
<mat-option [value]="item">
{{item.name}}
</mat-option>
</ng-container>
</ng-container>
</mat-select>
</mat-form-field>
Значения из раскрывающихся списков привязаны к переменным dropdownOne
и dropdownTwo
, А в параметрах l oop проверьте, не равно ли значение параметра выбранному значению другого раскрывающегося списка, перед его отображением. Поскольку мы проверяем элемент перед отображением, фильтр можно удалить из обработчика событий изменения.
Я изменил ваш Stackblitz