【问题标题】:Disable selected option from drop down One to drop down Two in angular 2 - Material从下拉菜单中禁用选定的选项 1 以在 Angular 2 中下拉 2 - 材质
【发布时间】:2018-12-11 12:38:11
【问题描述】:
<div class="row no-overflow">
    <div class="col-md-1 window-pad-height">
        <mat-label> Opportunity 1: </mat-label>
    </div>
    <div class="col-md-2 no-overflow">
        <mat-form-field class="no-overflow">
            <mat-select placeholder="select" [(ngModel)]="oppurtunityOne" [disabled]="selectedRankingCriteria.viewValue!=='Custom'">
                <mat-option *ngFor="let op1 of OppurtunityList" [value]="op1">
                    {{op1.viewValue}}
                </mat-option>
            </mat-select>
        </mat-form-field>
    </div>
</div>

<div class="row no-overflow">
    <div class="col-md-1 window-pad-height">
        <mat-label> Opportunity 2: </mat-label>
    </div>
    <div class="col-md-2 no-overflow">
        <mat-form-field class="no-overflow">
            <mat-select placeholder="select" [(ngModel)]="oppurtinityTwo" [disabled]="selectedRankingCriteria.viewValue!=='Custom'">
                <mat-option *ngFor="let op of OppurtunityList" [value]="op" [disabled]="oppurtunityOne.viewValue">

                    {{op.viewValue}}
                </mat-option>
            </mat-select>
        </mat-form-field>
    </div>
</div>


<div class="row no-overflow">
    <div class="col-md-1 window-pad-height">
        <mat-label> Opportunity 3: </mat-label>
    </div>
    <div class="col-md-2 no-overflow">
        <mat-form-field class="no-overflow">
            <mat-select placeholder="select" [disabled]="selectedRankingCriteria.viewValue!=='Custom'">
                <mat-option *ngFor="let op3 of OppurtunityList" [value]="op3">
                    {{op3.viewValue}}
                </mat-option>
            </mat-select>
        </mat-form-field>
    </div>
</div>


<div class="row no-overflow">
    <div class="col-md-1 window-pad-height">
        <mat-label> Opportunity 4: </mat-label>
    </div>
    <div class="col-md-2 no-overflow">
        <mat-form-field class="no-overflow">
            <mat-select placeholder="select" [disabled]="selectedRankingCriteria.viewValue!=='Custom'">
                <mat-option *ngFor="let op4 of OppurtunityList" [value]="op4">
                    {{op4.viewValue}}
                </mat-option>
            </mat-select>
        </mat-form-field>
        <button mat-raised-button color="primary">View</button>
    </div>
</div>

JSON 数据

    OppurtunityList: any[] = [
    { value: 'col-1', viewValue: 'datatoDisplay1' },
    { value: 'col-2', viewValue: 'datatoDisplay2' },
    { value: 'col-3', viewValue: 'datatoDisplay3' },
    { value: 'col-4', viewValue: 'datatoDisplay4' },
    { value: 'col-5', viewValue: 'datatoDisplay5' },
    { value: 'col-6', viewValue: 'datatoDisplay6' },
    { value: 'col-7', viewValue: 'datatoDisplay7' },
    { value: 'col-8', viewValue: 'datatoDisplay8' },
    { value: 'col-9', viewValue: 'datatoDisplay9' }
  ];

如何使用 typescript 从下拉列表中禁用选定的选项?
我应该在这里输入什么逻辑,我不知道如何禁用所选选项。
是否可以使用 ngModel 处理?

【问题讨论】:

  • 表示您要禁用下拉菜单 2 的选项,该选项已被下拉菜单 1 选中,对吗?
  • @R.Viral 是的,先生!
  • 谢谢,但是当我选择 4 时,这里会禁用 1 2 3 4 选项!

标签: angular typescript angular-material


【解决方案1】:

在您的第二个下拉菜单中,您可以这样写

<div class="col-md-2 no-overflow">
    <mat-form-field class="no-overflow">
        <mat-select placeholder="select" 
                    [(ngModel)]="oppurtinityTwo" 
                    [disabled]="selectedRankingCriteria.viewValue!=='Custom'">
            <mat-option *ngFor="let op of OppurtunityList" 
                        [value]="op" 
                        [disabled]="oppurtunityOne.viewValue === op.viewValue">
                {{op.viewValue}}
            </mat-option>
        </mat-select>
    </mat-form-field>
</div>

【讨论】:

  • 我可以为下拉三和四做这个吗?
  • 是的,你可以,根据你禁用的东西检查ng-modalcondition
  • [disabled]="oppurtunityOne.viewValue === oppurtunityTwo.viewValue || oppurtunityThree.viewValue === oppurtunityFour.viewValue 如果四个下拉选项相同,我试图禁用保存按钮走对了吗?
  • 上述逻辑输出是`value-1`等于value-2然后禁用或value-3 等于value-4然后禁用。如果您想将value-1 与所有下拉菜单进行比较,请尝试[disabled]=" (value-1 === value-2 || value-1 === value-3 || value-1 === value-4)"
  • 我也是这样做的,但是在选择第三个下拉菜单后按钮会被启用! “(oppurtunityOne.viewValue === oppurtunityTwo.viewValue || oppurtunityTwo.viewValue === oppurtunityThree.viewValue || oppurtunityThree.viewValue === oppurtunityFour.viewValue)”我试过这种方式,但这个也行不通!
【解决方案2】:

添加一个函数,该函数接受可以在组件中评估的输入:

<!-- html -->
<mat-select placeholder="select" 
[disabled]="disableSelectFunction(selectedRankingCriteria.viewValue)">

//Typescript
disableSelectFunction(value){
    if (value === 'myValue'){
        return true; // disabled
    } else {
        return false; // not disabled
    }
}

【讨论】:

  • 如果你不介意可以在 stakblitz 中解释一下吗?
  • 您正在将一个值传递给一个函数,对其进行评估并根据对所述值的评估返回一个布尔结果。我不会为你写代码。
猜你喜欢
  • 2018-05-26
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多