У меня есть следующая «проблема».Мне нужен способ в Angular (6) разделить 5 пунктов на 2 утверждения для каждого вопроса.Всего 40 вопросов, поэтому 80 утверждений.
Пример : если пользователь выбирает 3 пункта в первом утверждении, во втором утверждении автоматически должно быть только 2 пункта, а в остальныхбыть отключенным или удаленным, хотя пользователь должен иметь возможность выбрать другое количество точек в первом утверждении после этого, а второе утверждение должно измениться снова.
Пример изображения :
Текущий код HTML:
<form [formGroup]="ratingGroup">
<ng-container *ngFor="let questionData of questionsArr; let i = index;" formArrayName="ratings">
<section [@visibilityChanged]="(currentQuestion == i + 1) ? 'shown' : 'hidden'" [id]="'question-' + (i + 1)">
<div class="row">
<div class="col-12">
<p class="small">Divide 5 points over the next 2 statements<br />
You do not click on anything for 0 points.</p>
</div>
<div class="col-12" *ngFor="let question of questionData; let index = index;">
<p>{{ question.order }}) {{ question.text }}</p>
<fieldset class="rate" [formArrayName]="i">
<p class="float-left">Strongly disagree</p>
<p class="float-right">Strongly agree</p>
<label [for]="'rate' + ratingValue + '-' + question.id" title="Excellent" *ngFor="let ratingValue of ratingValues" [ngClass]="{blue: checker.checked}">
<input [id]="'rate' + ratingValue + '-' + question.id" type="radio" [name]="index" [value]="{rating: ratingValue, type: question.type}" (change)="onChange(ratingValue, index); setBlue($event)" [formControlName]="index" #checker>
</label>
</fieldset>
</div>
<div class="col-12">
<button class="back" [hidden]="currentQuestion == 1" (click)="previousQuestion()" pageScroll [href]="'#question-' + (currentQuestion - 1)">Back</button> <button (click)="nextQuestion()" pageScroll [href]="'#question-' + (currentQuestion + 1)">Next</button>
</div>
</div>
</section>
</ng-container>
</form>
Машинопись:
ratingValues = [5, 4, 3, 2, 1];
get ratings () {
return this.ratingGroup.get('ratings') as FormArray;
}
private buildForm(): void {
this.ratingGroup = this.formBuilder.group({
ratings: this.formBuilder.array([this.formBuilder.array([
this.formBuilder.control('', [Validators.required]),
this.formBuilder.control('', [Validators.required])
])])
});
}
getQuestions(): void {
this.questionService.getQuestions();
this.questionService.getQuestions().subscribe(response => {
let order = 0;
for (let i = 0; i < response.length; i++) {
if (!(i % 2)) {
this.questionsArr[order] = response.slice(i, i+2);
order++;
this.ratings.push(this.formBuilder.array([
this.formBuilder.control('', [Validators.required]),
this.formBuilder.control('', [Validators.required])
]));
}
}
console.log(this.questionsArr);
});
}