Quando marcar um <mat-checkbox> desmarcar outro

Tenho dois <mat-checkbox>

Valor por embalagem

<mat-checkbox
*ngIf="
statusAtualPode() &&
!fornecedorF.marcouEmbalagem &&
!fornecedorF.marcouTudo
"
[value]="fornecedorF.marcouCheckboxEmbalagem"
[checked]="fornecedorF.marcouCheckboxEmbalagem"
(change)="
defineFornecedorItemEmbalagem($event, fornecedorF)
"
></mat-checkbox>

Valor unitário

<mat-checkbox
*ngIf="
statusAtualPode() &&
!fornecedorF.marcou &&
!fornecedorF.marcouTudo
"
[value]="fornecedorF.marcouCheckbox"
[checked]="fornecedorF.marcouCheckbox"
(change)="defineFornecedorItem($event, fornecedorF)"
></mat-checkbox>

image

Ele clicou no de 11,00. Quando ele clicar no 550,00, emitir uma mensagem de erro (Isto eu consegui). Mas não consegui desmarcar o mat-checkbox de 550,00 que foi clicado.

Se for ter apenas 2 opções, vc pode apontar o value dos checkboxes para a mesma variável apenas negando em um dos componentes. Com isso, quando o valor da variável mudar (supondo que ela seja booleana), o resultado será da forma como vc espera.

Outra solução poderia trocar de check para radio.

O que vc acha?

1 curtida

Na verdade não posso mudar para rádio.

Um tem o [value]=“fornecedorF.marcouCheckboxEmbalagem” o ou outro tem [value]=“fornecedorF.marcouCheckboxEmbalagem”.

O fornecedorF é uma array.

No typescript esta assim:

async defineFornecedorItem(
    tipo: MatCheckboxChange,
    modelo: any
  ): Promise<void> {
    if (tipo.checked) {
      this.fornecedoresItens.forEach((item) => {
        item.fornecedores.forEach((fornecedor: any) => {
          if (fornecedor.marcouCheckboxEmbalagem) {
            this.errorService.error({
              error: {
                texto: this.textoEmbalagem,
              },
            });
            this.cdr.detectChanges();
            this.fornecedores.find(
              (f: any) => f.marcouCheckbox
            ).marcouCheckbox = false;
            return;
          }
        });
      });
   }
}

Pelo que entendi deveria desmarcar o checkbox dos 11,00


fornecedorF.marcouCheckbox:
image

Faltou negar em um deles:

// checkbox embalagem
[value]="!fornecedorF.marcouCheckboxEmbalagem"

// checkbox unitário
[value]="fornecedorF.marcouCheckboxEmbalagem"

Veja se essa abordagem faz sentido.

1 curtida

Não adiantou