angular - 如何根据选择其他下拉菜单禁用下拉选项?
问题描述
我需要根据当前下拉列表中的选定值禁用其他下拉列表中的选定值下面我提到了我的案例。
我有动态下拉列表,所以每个下拉列表都属于同一个 headerList 数组。
没有。的下拉菜单。
例如:
我总共有 10 个下拉菜单。如果用户从第一个下拉菜单中选择电子邮件,则所有其他下拉菜单应禁用此电子邮件选项,如果用户将所选值从电子邮件更改为电话号码,则应为所有下拉菜单启用电子邮件,并应为所有下拉菜单禁用电话号码。
app.component.ts
public headerList :string[]=['First Name','Last Name','Company Name','Email','Phone Number','Lead Source','Details','Address 1','Address 2','City','State','Country','Zip','Tags','Assign To'];
public disabledDropdownItems : string[]=[];
onDropdownChange(event,index){
if(event.target.value != ""){
this.disabledDropdownItems.push(event.target.value);
this.selectedDropdownColumns.push(index+';'+event.target.value);
}
else{
let deselectItem = this.selectedDropdownColumns.filter(item => item.includes(index+";"));
if(deselectItem != undefined && deselectItem.length > 0 ){
this.disabledDropdownItems.splice(this.disabledDropdownItems.indexOf(deselectItem[0],1));
this.selectedDropdownColumns = this.selectedDropdownColumns.filter( selectedItem => selectedItem != deselectItem[0]);
}
}
}
app.component.html
<div class="row" *ngFor="let header of manageLeadDataDto.header;let i = index"><br>
<div class="col-lg-2">
<input class="h-w-15" id="{{i}}" type="checkbox" (click)="onSelectDeselectCheckBox($event,i);"
title="Select {{header}}">
</div>
<div class="col-lg-5">{{header}}</div>
<div class="col-lg-5">
<select class="selectpicker" (change)="onDropdownChange($event,i);">
<option value="" [selected]="true">Please select value</option>
<option *ngFor="let header of headerList" value="{{header}}" [disabled]="disabledDropdownItems.includes(header)">{{header}}</option>
</select>
</div>
</div>
以上是我的代码,但它没有禁用下拉值
解决方案
这很简单,我们所要做的就是将该索引和选定的值保存在一个变量中,这里
<div class="row" *ngFor="let header of [1,2,3,4,5];let i = index"><br>
<div class="col-lg-2">
<input class="h-w-15" id="{{i}}" type="checkbox" (click)="onSelectDeselectCheckBox($event,i);"
title="Select {{header}}">
</div>
<div class="col-lg-5">{{header}}</div>
<div class="col-lg-5">
<select class="selectpicker" (change)="onDropdownChange($event,i);">
<option value="" [selected]="true">Please select value</option>
<option *ngFor="let header of headerList; let j = index"
value="{{header}}"
[disabled] = 'header===disabledItem && (selectIndex && selectIndex != i+1)'
>{{header}}</option>
</select>
</div>
</div>
在你的 ts
disabledItem ='';
selectIndex = 0;
public headerList :string[]=['First Name','Last Name','Company Name','Email','Phone Number','Lead Source','Details','Address 1','Address 2','City','State','Country','Zip','Tags','Assign To'];
onDropdownChange(event , i){
this.selectIndex = i+1;
this.disabledItem = event.target.value;
console.log(event.target.value , i)
}
参考这个工作演示
https://stackblitz.com/edit/angular-giemqz?file=src/app/app.component.html
推荐阅读
- android - Android compose Card在使用半透明颜色时有边框
- python - 漂亮汤中的css选择器找不到标签
- python - 在 python 中用 3d 瀑布图创建电影
- javascript - 实现从对象字段和字段值生成字符串的 C# 代码
- pandas - 根据列值创建列 - 合并整数
- vue.js - Vuetify v-simple-table 加载状态
- mysql - 是否可以将 MySQL 唯一索引更改为非唯一索引而不重新创建它
- flutter - 如何在flutter中获取当前ID(UUID?/RFID?)?
- python - 两个问题的幂的负一 - 即 (-1)**2
- google-apps-script - 有没有办法在不删除旧问题并重新制作的情况下更新现有的谷歌表单问题的描述和选项?