Есть несколько проблем. Во-первых, вызов multipleAnswer
only inside ngOnInit
устанавливает эту логическую переменную только один раз в начале, она должна быть внутри ngOnChanges
.
Но это не единственная проблема здесь, главная проблема в вашем QuizService
. Здесь вы используете this.quizService.getQuestionType();
метод для установки multipleAnswer
true или false, но внутри вашего getQuestionType()
метода QuizService вы проверяете this.correctAnswers
, если он установлен, и имеет длину элемента 1, но this.correctAnswers
всегда пуст при вызове.
Другая проблема в вашем ngOnChanges
у вас есть switch (this.question.type)
здесь this.question
кажется неопределенным в любое время.
Отредактируйте ваш код, как показано ниже, и проверяйте вывод консоли каждый раз, когда появляется вопрос.
Добавьте новый метод get correctAnswers
из вопроса.
getCorrectAnswers(question:QuizQuestion){
return question.options.filter((item)=> item.correct);
}
И отредактируйте Начиная с ngOnChanges, как показано ниже, я также добавил вывод консоли, чтобы вы могли видеть данные из нового метода выше.
ngOnChanges(changes: SimpleChanges) {
if (changes.question && changes.question.currentValue !== changes.question.firstChange){
this.currentQuestion = changes.question.currentValue;
this.correctAnswers = this.getCorrectAnswers(this.currentQuestion);
this.multipleAnswer = this.correctAnswers.length > 1 ? true : false;
console.log('correct ans: ', this.correctAnswers);
...
Я не могу изменить весь код, так как у вас есть собственный лог c за вашим кодом, но я обновил ответ, чтобы переменные, связанные с этой проблемой, правильно устанавливались внутри 'ngOnChanges`.