私はname
とid
のようなリストを持っています:
_[
{
"name": "open",
"id": "1"
},
{
"name": "inprogress",
"id": "2"
},
{
"name": "close",
"id": "3"
}
]
_
また、* ngForでMatSelectを使用して配列を反復処理し、[(ngModel)]
を使用して現在のステータスをselectにバインドします。
予想される出力:
現在のステータスがinprogress
の場合、open
オプションを無効にします
ユーザーが複数のオプションを選択できる場合でも、ngModelは必要ありません。以下は、angular material mat-select。
//toppings is a form control name for mat-select
this.toppings.valueChanges.subscribe((selection) => {
this.selected = '';
//includes because in case we are using multi selection we will receive selection as array
if(selection.includes('inprogress')) // if index instead of name use index value
this.selected = 'inprogress' // selected is globally defined variable
)}
checkUserSelection(topping){
if(this.selected === 'inprogress' && topping === 'open')"{
return true;
}
return false
}
----------------- Htmlコード---------------------
<mat-form-field>
<mat-select placeholder="Toppings"
[formControl]="toppings">
<mat-option *ngFor="let topping of list"
[value]="topping.id"
[disabled]="checkUserSelection(topping)"
</mat-option>
</mat-select>
以下のように条件を置くことにより、マット選択のオプションを無効にすることができます:
<mat-form-field>
<mat-select placeholder="Toppings" [(ngModel)]="selected" [formControl]="toppings">
<mat-option *ngFor="let topping of list" [value]="topping.id" [disabled]="topping.id < selected.id">{{topping.name}}</mat-option>
</mat-select>
</mat-form-field>
<br>