Угловой 6: Викторина с FormGroup и FormControl

У меня есть компонент викторины и интерфейс с именем IQuiz, который содержит детали викторины и множество вопросов. Массив вопросов содержит один вопрос, 4 ответа и правильный ответ, который является номером вопроса.

Когда я проверяю ответ, все остальные вопросы проверяются с тем же ответом, и все ответы меняются, когда я меняю один ответ. Я не использую *ngFor, я получаю текущий вопрос каждый раз, когда нажимаю на предыдущий или следующий, и я знаю, что это, вероятно, является причиной, но я не знаю, как это исправить.

это файл компонента ts и файл html:

// Quiz.Componet.ts

import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';
import { ActivatedRoute, Router, Routes, NavigationEnd } from '@angular/router';
import { FormControl, FormBuilder, FormGroup, Validators } from '@angular/forms';

import { ICourse, IUnit, IQuiz, IQuestion } from '../../course';
import { CourseService } from '../../course.service';

import * as _ from 'underscore';

@Component({
  selector: 'quiz-course',
  templateUrl: './course-quiz.component.html',
  styleUrls: ['./course-quiz.component.sass']     
})

export class CourseQuizComponent implements OnInit {

  @Input() questions: IQuestion[];
  @Input() quizName: string;
  @Input() quizId: string;

  public show: boolean;
  public showQuestions: boolean;
  public currentQuestion: IQuestion;
  public currentIndex: number;
  public currentUnit: number;


  answersArray: any[];                // array of answers the user choose
  answersIndex: number;                      // current index of answersArray
  sum: number = 0;                       // number of answers the user answered
  public quizForm: FormGroup         // radio buttons in the quiz form

  constructor(private courseService: CourseService,
      private route: ActivatedRoute,
      private router: Router,
      private fb: FormBuilder) { }

  ngOnInit() {
    this.showQuestions = false;
    this.currentUnit = +this.route.snapshot.paramMap.get('unitId');

    this.quizForm = this.fb.group({
      selected: [{value: ''}, [Validators.required]]
    });

    this.getCurrentQuestion(0);
  }

  // get current question
  getCurrentQuestion(index: number) {
    this.currentIndex = index;
    this.currentQuestion = this.questions[index];
  }

  // insert to local array the answers of the user after he press submit
  answered() {
    debugger;
  }

  onSubmit() { }

  onDestroy() {  }

}

<!-- Quiz.Component.html -->

  <div class="text-center" *ngIf="!showQuestions">
    <h5 class="text-left">Unit {{currentUnit}}</h5>
    <h1>{{quizName}}</h1>
    <p class="text-left"> Now that you've finished this unit, It's
        time to take a short quiz and see what you learned so far!
        Good Luck!
      </p>
      <p class="text-left"> 4 questions </p>
      <a (click) = "showQuestions = true"><h5 class="navigate">Start Quiz</h5></a>
  </div>

    <div class="container text-center" *ngIf="showQuestions">
        <div class="text-left" *ngIf="currentQuestion">
          <form [formGroup]="quizForm" (ngSubmit)="onSubmit()">
            <!-- items being paged -->
            <h3>Question {{currentIndex + 1}}/{{questions.length}}</h3>
            <h6>{{currentQuestion.question}}</h6>
            <div class="form-group">
              <mat-radio-group formControlName="selected" class="form-control">
                <ul class="items">
                  <li><mat-radio-button color="primary" id="answer1" value="1"></mat-radio-
                      button><label for="answer1">1. {{currentQuestion.answer1}}</label></li>
                  <li><mat-radio-button color="primary" id="answer2" value="2"></mat-radio-
                      button><label for="answer2">2. {{currentQuestion.answer2}}</label></li>
                  <li><mat-radio-button color="primary" id="answer3" value="3"></mat-radio-
                      button><label for="answer3">3. {{currentQuestion.answer3}}</label></li>
                  <li><mat-radio-button color="primary" id="answer4" value="4"></mat-radio-
                      button><label for="answer4">4. {{currentQuestion.answer4}}</label></li>
                </ul>
              </mat-radio-group>
            </div>
          </form>
        </div>

        <!-- Prev Next Bar -->
        <footer id="footer" class="row justify-content-between navbar-fixed-bottom">

          <!-- Next and Prev links -->
          <div class="col-4 text-left">
            <div *ngIf="currentIndex > 0 ">
              <h3 class="prev" *ngIf="!isPrevQuiz" (click)=getCurrentQuestion(currentIndex                      -1)>Previous question</h3>
            </div>
          </div>
          <div class="col-4 text-right">
            <div *ngIf="currentIndex < questions.length - 1">
              <h3 class="navigate" *ngIf="!isNextQuiz"
              (click)=getCurrentQuestion(currentIndex+1)>Next question</h3>
            </div>
            <div *ngIf="currentIndex == questions.length - 1">
              <button class="submit">Submit Quiz</button>
            </div>
          </div>
        </footer>
      </div>

0 ответов

Другие вопросы по тегам