2017-10-02 1 views
1

Je crée un formulaire dans lequel un champ de saisie ne devrait pas être requis en fonction d'une condition précédente (par exemple, une case à cocher).La définition de l'attribut "CONDITION" ne vérifie rien

Si l'attribut required est défini comme élément, la validation requise fonctionne correctement. Si je définis l'attribut required avec [attr.required] = "CONDITION", il ne le vérifie pas du tout.

Voici un échantillon de plnkr: https://plnkr.co/edit/vPfmgvLxUjNyNXHtkY24 (basé sur le hero example du documentation).

code

(partie relevent):

<form #heroForm="ngForm"> 
     <div class="form-group"> 
     <label for="name">Required label Test</label> 
     <input type="checkbox" class="form-control" [(ngModel)]="cbReqired" name="cbReqired" id="cbReqired"> 
     </div> 

     <div [hidden]="!cbReqired">Now the Textbox should be required! (<code>required="true"</code> is set!)</div> 

     <div class="form-group"> 
     <label for="name">Name</label> 
     <input id="name" name="name" class="form-control" [attr.required]="cbReqired" [(ngModel)]="hero" #name="ngModel"> 

     <div *ngIf="name.invalid && (name.dirty || name.touched)" class="alert alert-danger"> 

      <div *ngIf="name.errors.required"> 
      Name is required. 
      </div> 
     </div> 
     </div> 

     <button type="submit" class="btn btn-default" [disabled]="heroForm.invalid">Submit</button> 
     <button type="button" class="btn btn-default" (click)="heroForm.resetForm({})">Reset</button> 
    </form> 
+0

Utilisez [required], pas [attr.quand]. –

+0

Quelle est la question? Angular utilise la directive pour required et définit l'attribut en interne en fonction de la valeur que vous avez fournie dans la propriété. donc vous devez utiliser '[required] =" val "' https://github.com/angular/angular/blob/master/packages/forms/src/directives/validators.ts#L79 – yurzui

Répondre

1

Vous avez juste besoin d'utiliser [required] au lieu de [attr.required]. Voici le plunker de travail: https://plnkr.co/edit/B6dM2BvD3hMH3Skv6uy5?p=preview

+1

okay ... alors maintenant ça marche et c'était aussi simple ... wow: D (7min de plus jusqu'à ce que je puisse l'accepter) – Stefan

+0

Super! Mais je n'ai vraiment aucune idée, pourquoi '[attr.required]' ne fonctionne pas ... –

+0

Si quelqu'un sait, je pourrais passer la réponse acceptée :) – Stefan