Eu tenho um menu suspenso Angular Material e preciso desabilitar elementos específicos desse menu suspenso, com base no valor selecionado em outro menu suspenso.
Aqui está o HTML para os dois menus suspensos:
<mat-form-field>
<mat-label>Choose an option</mat-label>
<mat-select id="lineOfBusiness" formControlName="lineOfBusiness">
<mat-option value="commercial">Commercial</mat-option>
<mat-option value="residential" >Residential</mat-option>
<mat-option value="industrial">Industrial</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-label>Choose an option</mat-label>
<mat-select id="psv" formControlName="psv">
<mat-option value="inclinometer">Inclinometer</mat-option>
<mat-option value="heil" >Heil</mat-option>
<mat-option value="radar">Radar</mat-option>
<mat-option value="hydraulics">Hydraulics</mat-option>
<mat-option value="coretex">Coretex</mat-option>
</mat-select>
</mat-form-field>
Por exemplo, a lógica seria mais ou menos assim: Se 'lineOfBusiness' = 'comercial', então no menu suspenso 'psv', 'radar' deve ser desabilitado.
No meu arquivo form.component.ts, tenho esta função, que está sendo executada sem erros, mas não está desativando as opções necessárias.
disableOption(optionValue: string): void {
console.log("Disabling " + optionValue);
const psvControl = this.reactiveForm.get('psv');
if (psvControl) {
const option = psvControl.get(optionValue);
if (option) {
option.disable();
}
}
}
O que estou fazendo de errado?
Conceito chave:
Obtenha o elemento DOM MatSelect para
psv
controle por meio da variável de referência do modelo.Assine o
lineOfBusiness
controlevalueChanges
para disparar odisableOption
método quando olineOfBusiness
valor for alterado.Desative a opção mat quando o valor "comercial" for selecionado para o
lineOfBusiness
controle e vice-versa.Você precisa declarar a variável de referência do modelo
#psvSelect
conforme abaixo:Demonstração @ StackBlitz