typescript 如何基于从一个材质选择中选择一个选项来禁用两个材质选择的选项?

krcsximq  于 2023-01-06  发布在  TypeScript
关注(0)|答案(1)|浏览(130)

我正在做一个有两个下拉菜单的项目。
在那里,我可以根据在另一个下拉菜单中选择的选项,动态禁用/启用一个下拉菜单的选项:
ts代码:

disable(obj) {
    let index = this.select2.indexOf(obj);
    if (index === -1) {
      return false;
    } else {
      return true;
    }
  }

  disable1(obj) {
    let index = this.select1.indexOf(obj);
    if (index === -1) {
      return false;
    } else {
      return true;
    }
  }

HTML代码:

<h1>Select-1</h1>
<mat-form-field appearance="outline">
  <mat-select [(value)]="select1" multiple>
    <mat-optgroup *ngFor="let item of arr1" [label]="item.type">
      <mat-option
        *ngFor="let data of item.name"
        [value]="data"
        [disabled]="disable(data)"
      >
        {{ data }}
      </mat-option>
    </mat-optgroup>
  </mat-select>
</mat-form-field>
<h1>Select-2</h1>
<mat-form-field appearance="outline">
  <mat-select [(value)]="select2" multiple>
    <mat-optgroup *ngFor="let item of arr2" [label]="item.type">
      <mat-option
        *ngFor="let data of item.name"
        [value]="data"
        [disabled]="disable1(data)"
      >
        {{ data }}
      </mat-option>
    </mat-optgroup>
  </mat-select>
</mat-form-field>

但我也想禁用/启用两个下拉菜单的所有其他选项时,"所有口袋妖怪"被选中。像,如果"所有口袋妖怪"被选中在第一个下拉菜单,然后所有其他选项和第二个下拉菜单的选项也被禁用。同样,如果我取消选择"所有口袋妖怪"的选项将被启用。
我该怎么做?
先谢谢你的帮助。
Stackblitz demo

ivqmmu1c

ivqmmu1c1#

对于disable函数,请尝试以下操作:

disable(obj) {
    if(this.select1.find(x => x === 'All Pokemon')){
      if(obj !== 'All Pokemon'){
        return true;
      }
    }
    let index = this.select2.indexOf(obj);
    if (index === -1) {
      return false;
    } else {
      return true;
    }
  }

如果您希望它双向工作,然后尝试:

disable(obj) {
    if(this.select1.find(x => x === 'All Pokemon') || this.select2.find(x => x === 'All Pokemon')){
      if(obj !== 'All Pokemon'){
        return true;
      }
    }
    let index = this.select2.indexOf(obj);
    if (index === -1) {
      return false;
    } else {
      return true;
    }
  }

  disable1(obj) {
    if(this.select1.find(x => x === 'All Pokemon') || this.select2.find(x => x === 'All Pokemon')){
      if(obj !== 'All Pokemon'){
        return true;
      }
    }
    let index = this.select1.indexOf(obj);
    if (index === -1) {
      return false;
    } else {
      return true;
    }
  }

相关问题