у вас, кажется, есть базовое неправильное понимание контекста переменной индекса и того, как будут работать наблюдаемые.Что может помочь здесь и прояснить ситуацию, так это разделить ваш компонент на два компонента: один для управления и отображения общего списка, а другой для управления и отображения дочерних списков
Родитель (app-java):
HTML:
<div *ngFor="let question of questions | async; index as i">{{question.libelle}}
<div class="row text-left options">
<app-java-child [i]="i"></app-java-child>
</div>
{{i}}
</div>
TS:
@Component({
selector: 'app-java',
templateUrl: './java.component.html',
styleUrls: ['./java.component.sass']
})
export class JavaComponent implements OnInit {
questions :any = [];
constructor(private questionnaireService: QuestionnaireService) { }
ngOnInit() {
this.questions = this.questionnaireService.getQuestion();
}
}
и дочерний элемент:
HTML:
<div class="col-md-6" *ngFor="let reponse of reponses | async">
<div class="option">
<label class="" [attr.for]="reponse.id">
<input type="checkbox" [(ngModel)]="reponse.Selected"/>
{{reponse.libelle}}
</label>
</div>
</div>
TS:
@Component({
selector: 'app-java-child',
templateUrl: './java-child.component.html',
styleUrls: ['./java-child.component.sass']
})
export class JavaChildComponent implements OnInit {
@Input() i : any;
reponses :any = [];
constructor(private questionnaireService: QuestionnaireService) { }
ngOnInit() {
this.reponses = this.questionnaireService.getReponse(this.i);
}
}
Таким образом, вы берете индекс из исходного ngFor и передаете его ребенку в качестве входных данных, чтобы дети могли отвечать за построение своих собственных массивов ответов.