2017-10-17 4 views
0

J'ai un simple quiz avec un ensemble de questions et chaque question ayant 4 ou 5 options multichoix. L'option correcte est sélectionnée en cliquant sur un bouton radio associé.Angular 4 et ngForm - des options de bouton radio non sélectionnées sont en cours de soumission

Lorsque je soumets le formulaire, les options sélectionnées sont envoyées au serveur, MAIS c'est aussi la dernière option de chaque question sans réponse.

Le modèle/code pour créer le quiz est:

<form #f="ngForm" (ngSubmit)="onSubmit(f)" class="form-horizontal">      
    <div *ngFor="let item of aData; let i=index"> 
    <p class="question"><strong>Question {{i+1}}.</strong> <span [innerHTML]="item['question'] | keepHtml"></span></p> 
    <ul class="nobullet"> 
     <li class='mcqoptions' *ngFor="let mcq of item.mcq"> 
      <label> 
      <input type="radio" name="option{{i}}" [ngModel]="mcq['mcqID']" value="{{mcq['mcqID']}}" ><span [innerHTML]="mcq['mcqoption'] | keepHtml"></span> 
      </label> 
     </li> 
    </ul> 
     <p id="qfb{{item['questionID']}}" class="quizfback"></p> 
     <input type="hidden" name="questionID{{i}}" [ngModel]="item['questionID']"/> 
    </div> 
    <div style="padding:20px 0" class="form-group"> 
     <div class="col-sm-12 controls"> 
     <button type="submit" class="btn btn-success">Submit this quiz</button> 
     </div> 
    </div> 
</form> 

La fonction d'envoi est:

onSubmit(f):void{  
const dataToSave = f.value; 
this.service.processQuiz('processquiz', dataToSave).subscribe(
    fback => { 
    this.submitPending = false;     
    this.msg = fback.msg; 
    this.bMessage = true; 
    }, error => { 
    this.submitPending = false; 
    },() => { 
    this.submitPending = false; 
    } 
); 

Je manque quelque chose ici, mais je ne peux pas le trouver.

Merci/Tom

+0

est la valeur par défaut définie sur null pour toutes les options et pourquoi change pas la valeur à [valeur] = MCQ [ « mcqID »] – fastAsTortoise

+0

Merci pour la réponse. Malheureusement, je ne comprends pas l'un ou l'autre point. Comment la valeur par défaut est-elle définie sur null? Ceci n'est pas explicitement fait dans un formulaire HTML "normal". Comment est-ce explicitement fait sous une forme dans Angular? – TomBaine

+0

[ngModel] = "mcq ['mcqID']" value = "{{mcq ['mcqID']}}" ne devrait pas être la même selon ma compréhension, vous sélectionnez toujours la valeur et le fait que c'est toujours la dernière est parce que la radio sélectionne seulement une valeur ainsi le dernier reste comme valeur choisie pour la question qui sont sans réponse. – fastAsTortoise

Répondre

0

d'abord s'il vous plaît montrer le reste du code pour le composant. Deuxièmement, vous préconfigurez déjà la valeur de chaque bouton radio avant que l'utilisateur ne sélectionne. Ainsi, même s'ils ne font pas de sélection, une valeur est déjà envoyée onSubmit. value="{{mcq['mcqID']}}"

<input type="radio" name="option{{i}}" [ngModel]="mcq['mcqID']" value="{{mcq['mcqID']}}" ><span [innerHTML]="mcq['mcqoption'] | keepHtml"></span>