Можно ли создать независимые дочерние компоненты из ngFor итерации в Angular 2?
Я делаю приложение Quiz со структурой, где один компонент Quiz
имеет несколько Categories
, а одна категория имеет несколько Questions
.
Угловое будет генерировать форму из Quiz, полученной из REST api, где пользователь может перемещаться между различными категориями вопросов и, наконец, сохранять частичную или представлять полную форму.
Я набросал следующую псевдоструктуру для шаблона приложения:
<html>
<form>
<category>
<question *ngFor="let question of questions" />
<category>
<navigate/>
</form>
</html>
Quiz component
есть список категорий и ссылка на активную категорию. Category component
есть привязка ввода для отражения активной категории Quiz. Category
есть список вопросов, которые я хочу инкапсулировать в отдельный компонент. Таким образом, я перебираю список вопросов и создаю вопросительный тег.
Теперь проблема заключается в том, как я заполняю Question component
для каждого тега в соответствии с объектом вопроса, создающим этот тег? Возможно ли это, или я должен объединить шаблон вопроса с категорией?
Передайте объект Question
компонент Question
используя свойство ввода. Позвольте называть это свойство ввода qObj
:
<question *ngFor="let questionObj of questions" [qObj]="questionObj"></question>
В компоненте " Question
объявите свойство ввода:
import {Component, Input} from '@angular/core';
@Component({
selector: 'question',
template: '<div>{{qObj.question}}' // I'm assuming it has a question property
})
export class Question {
@Input() qObj:Object;
}
Ваш вопрос немного расплывчатый. мне кажется, что ваш компонент категории должен получить из списка серверов список вопросов с помощью ngOnInit hook.
https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html
Я не уверен, полностью ли я понимаю ваш вопрос, но если ваша категория содержит список вопросов, вы должны сделать свой ngFor или я предлагаю ng-repeat в категории
<html>
<form>
<category ng-repeat="question in $ctrl.questions">
<question/>
<category>
<navigate/>
</form>
</html>
Где $ ctrl должен ссылаться на контроллер вашей категории.
Затем вы можете использовать переменную вопроса внутри этого тега