Bouton de désactivation Angular2


113

Je sais que dans angular2 je peux désactiver un bouton avec l' [disable]attribut, par exemple:

<button [disabled]="!isValid" (click)="onConfirm()">Confirm</button>

mais puis-je le faire en utilisant [ngClass]ou [ngStyle]? Ainsi:

<button [ngStyle]="{disabled : !isValid}" (click)="onConfirm()">Confirm</button>

Merci.


1
ici fonctionne plnkr pour le même plnkr.co/edit/MW3vT4XscWcKrDdAwBoE?p=preview
Pardeep Jain

Réponses:


173

Mettre à jour

Je me demande. Pourquoi ne souhaitez-vous pas utiliser la [disabled]liaison d'attribut fournie par Angular 2? C'est la bonne façon de gérer cette situation. Je vous propose de déplacer votre isValidchèque via la méthode des composants.

<button [disabled]="! isValid" (click)="onConfirm()">Confirm</button>

Le problème avec ce que vous avez essayé expliqué ci-dessous

En gros, vous pouvez utiliser ngClassici. Mais l'ajout d'une classe n'empêcherait pas l'événement de se déclencher. Pour déclencher un événement sur une entrée valide, vous devez modifier le clickcode d'événement ci-dessous. Donc, cela onConfirmne sera déclenché que lorsque le champ est valide.

<button [ngClass]="{disabled : !isValid}" (click)="isValid && onConfirm()">Confirm</button>

Démo ici


Eh bien, j'ajoute que ngClass est déjà dans le bouton, donc il me semble que désactivé doivent être là, pourquoi la méthode [désactivée] est préférable?
Nir Schwartz

@NirSchwartz parce qu'il fera les deux choses à la fois .. les règles css du sélecteur seront appliquées sur l' button[disabled]événement basé sur le sélecteur et désactivé limiteront l' clickévénement à se déclencher sur le bouton .. dans la ngClassclasse, vous devez le gérer vous-même, comme je l'ai montré dans réponse ci-dessus ..
Pankaj Parkar

La raison pour laquelle les gens veulent utiliser [attr.disabled] plutôt que [disabled] est que [désactivé] angulaire de FormControl ne peut pas être défini dynamiquement. Voici le numéro github.com/angular/angular/issues/11271
davyzhang

1
Vous ne devez pas appeler une méthode dans une liaison de modèle. [disabled]="!isValid"
Tom

3
Ahhaa .. si la méthode a juste une référence de variable, theb c'est très bien .. Si vous avez une logique complexe à l'intérieur d'une fonction, alors ce n'est pas préféré. Vous avez raison, dans ce cas, je peux directement appeler le isValiddrapeau sur l'interface utilisateur
Pankaj Parkar

39

Je recommanderais ce qui suit.

<button [disabled]="isInvalid()">Submit</button>

4
N'est-il pas préférable d'éviter les appels de fonction en html, car il sera appelé à chaque tick / cycle?
John



5

Utiliser ngClasspour désactiver le bouton pour le formulaire invalide n'est pas une bonne pratique dans Angular2 lorsqu'il fournit des fonctionnalités intégrées pour activer et désactiver le bouton si le formulaire est respectivement valide et invalide sans faire aucun effort / logique supplémentaire.

[disabled] fera tout comme si le formulaire est valide, il sera activé et si le formulaire n'est pas valide, il sera automatiquement désactivé.

Voir l'exemple:

<form (ngSubmit)="f.form.valid" #f="ngForm" novalidate>
<input type="text" placeholder="Name" [(ngModel)]="txtName" name="txtname" #textname="ngModel" required>
<input type="button" class="mdl-button" [disabled]="!f.form.valid" (click)="onSave()" name="">


3

Peut-être que le code ci-dessous peut vous aider:

<button [attr.disabled]="!isValid ? true : null">Submit</button>

Ce n'est pas une bonne solution car <button disabled="">ou <button disabled="false">est toujours géré comme un bouton désactivé dans la plupart des navigateurs
BillyTom

2

J'ai essayé d'utiliser désactivé avec l'événement de clic. Ci-dessous, l'extrait de code, la réponse acceptée a également parfaitement fonctionné, j'ajoute cette réponse pour donner un exemple de la façon dont elle peut être utilisée avec les propriétés désactivées et cliquées.

<button (click)="!planNextDisabled && planNext()" [disabled]="planNextDisabled"></button>

2

Si vous utilisez des formulaires réactifs et que vous souhaitez désactiver certaines entrées associées à un contrôle de formulaire, vous devez placer cette disabledlogique dans votre code et appeler yourFormControl.disable()ouyourFormControl.enable()


2

Je pense que c'est le moyen le plus simple

<!-- Submit Button-->
<button 
  mat-raised-button       
  color="primary"
  [disabled]="!f.valid"
>
  Submit
</button>

1
 <button [disabled]="this.model.IsConnected() == false"
              [ngClass]="setStyles()"
              class="action-button action-button-selected button-send"
              (click)= "this.Send()">
          SEND
        </button>

.ts code

setStyles() 
{
    let styles = {

    'action-button-disabled': this.model.IsConnected() == false  
  };
  return styles;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.