Угловая 6 вложенная динамическая реактивная форма - PullRequest
0 голосов
/ 23 июня 2018

Я изо всех сил пытаюсь понять, как реализовать вложенную ReactiveForm.У меня есть множество вопросов с массивом ответов.Ответы будут в группе переключателей.Тем не менее, я не знаю, сколько и сколько ответов на каждый вопрос.Я получу из API.

На каждый вопрос требуется ответ.

например,

    <form class="form-group" id="{{prefix+'QuestionsForm'}}" [formGroup]="Form">
            <div class="form-group" id=" 
                {{prefix+'QuestionsAnswers'+'_'+i}}" *ngFor="let question of questions; index as i;">
                <div class="row">
                    <div class="col-xs-1 question-col">{{(i+1)+'. '}}</div>
                    <div id="{{prefix+'Question'+'_'+i}}" class="col-xs-11 no-padding-left>{{question.question}}</div>
                </div>
                <!--<div class="alert alert-danger gap-top-small alert-dismissible fade in experian" role="alert" style="display: block;">
                    <div class="glyphicon glyphicon-remove-sign color5 floatLeft"></div>
                    <div class="left-indent-text-block">Please select an option.</div>
                </div>-->
                <div class="row space-bottom-large">
                    <div class="col-xs-12 space-top-large">
                        <div class="radio-button space-top-small">
                            <div id="{{prefix+'Answers'+'_'+i}}" class="row space-left-large">
                                <div class="col-xs-12 space-bottom-large" *ngFor="let answer of question.answers; index as a">
                                    <input type="radio" name="{{'radio-group_'+i}}" id="{{prefix+'AnswerInput'+'_'+i+'_'+a}}" [value]="answer">
                                    <label id="{{prefix+'AnswerLabel'+'_'+i+'_'+a}}" for="{{prefix+'AnswerInput'+'_'+i+'_'+a}}">
                                        <span class="pull-left>
                                            {{answer}}
                                        </span>
                                    </label>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </form>

this.questions = [
    {
      question: "What is your favorite color?",
      answers: ["red", "blue", "green"]
    },
    {
      question: "What is your favorite animal?",
      answers: ["lion", "tiger", "dog", "cat"]
    },
    ..........
]

Так что я думаю, что структура ReactiveForm должна быть:

Form: FormGroup(
  Questions: FormArray([
    Answers: FormArray([], Validators.required)
  ])
)

ИЛИ должна быть:

Form: FormGroup(
  Questions: FormArray([
    Question: "",
    Answer: FormControl(Validators.required)
  ])
)

Иликакая-то другая структура?

Я не понимаю, какую структуру ReactiveForm я должен использовать, чтобы создать форму, чтобы разрешить неизвестное количество вопросов и ответов.но требуйте, чтобы на каждый вопрос был выбран ответ.

Ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Структура реактивной формы, которую вы ищете, такова:

FormGroup({
    Questions: FormArray([
        FormControl(Validators.required),
        FormControl(Validators.required),
        ...
    ])
})

По сути, вы хотите добавить запись для каждого вопроса в FormArray.Каждая запись состоит из FormControl для группы переключателей.Таким образом, все ответы на вопрос имеют общий FormControl.

Я также сделал пример Plunker, основанный на ваших требованиях:

Пример радиокнопки угловой вложенной динамической реактивной формы 6

Вы можете зарегистрировать форму на консоли Plunker и исследовать ее.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...