Нужна помощь в создании реактивной формы списка ввода радио.

Я хочу реализовать свой выбор с помощью реактивных форм, я новичок в этом, поэтому вот мой код:

Я уже пытался реализовать это с документацией и предоставленными примерами, но безуспешно и уничтожил мой выбор выбора переключателя с одним выбором. Что мне нужно реализовать в моем файле .ts и здесь, в моем фрагменте html, чтобы понять это?

Вот мой рабочий фрагмент HTML:

<div *ngFor="let stream of myList">
    <label>
      {{ stream.sys }}
    </label>
    <p *ngFor="let type of stream.types">
      <tr>
        <input type="radio" name="nav"/>
        {{ type.type.label }}
      </tr>
    </p>
  </div>

Я перебираю внешний список и внутренний список с помощью радио типа ввода. Все работает нормально. Теперь я хочу реализовать его как реактивные формы:

Это мой желаемый результат, например:

Test
 o Number 1
Test2
 o Number 10
 o Number 20
Test3
 X Number 100

Value: Number 100 // or some id i have in my input data -> type.type.id

Эта навигация должна быть выбором одного элемента, и я хочу показать значение формы в моем списке в качестве первого шага.

Я пробовал что-то вроде этого:

.html

<form [formGroup]="form">
  <div *ngFor="let stream of myList">
    <label>
      {{ stream.sys }}
    </label>
    <p *ngFor="let type of stream.types">
      <tr>
        <input type="radio" name="name" formControlName="name" />
        {{ type.type.label }}
      </tr>
    </p>
  </div>
</form>

<p>
    Value: {{ form.value | json}}
</p>

.ts

form: FormGroup;
constructor(private formBuilder: FormBuilder) {
  this.form = formBuilder.group({
    name: ['']
  });

person Maverick777    schedule 16.08.2019    source источник
comment
Привет, это немного сбивает с толку, что вы спрашиваете. Вы говорите, что хотите, чтобы это был один выбор, но вы все еще используете переключатель в своем примере. Пожалуйста, можете уточнить?   -  person Andrew Junior Howard    schedule 16.08.2019
comment
@AndrewJuniorHoward Я имел в виду полную форму для всех переключателей, я думаю, один выбор был немного запутанным. Я адаптировал это, я хочу, чтобы в моем полном списке был только один выбираемый. Это работает с моим примером выше. Я думаю, что в моем элементе управления формы отсутствует декоратор значений...?   -  person Maverick777    schedule 16.08.2019
comment
У вас есть пример этого stackblitz? Довольно сложно судить об этом, не видя поступающих данных.   -  person Andrew Junior Howard    schedule 16.08.2019
comment
вам нужно придать некоторую ценность вашему радио [value]=... <input type="radio" name="name" [value]="type.type.value" formControlName="name" />   -  person Eliseo    schedule 16.08.2019
comment
@Eliseo, спасибо за ваш ответ, я получил его немного по-другому, но ваш лучше. Спасибо!   -  person Maverick777    schedule 16.08.2019


Ответы (1)


  1. Ваш цикл на myList. FormBuilder должен содержать массив групп. И каждая отдельная группа должна содержать элемент управления «имя». «значение» не должно быть необходимо. И если вы хотите что-то предустановить, вы можете установить это в конструкторе форм.
  2. Это не связано с проблемой, но я не думаю, что <tr> неверен в <p>. Вместо этого вы можете просто добавить цикл в div вместо абзаца, а затем удалить строку таблицы.
person Jens Alenius    schedule 16.08.2019
comment
Йенс, он использует радиокнопки, это только FormControl, а не массив форм. - person Eliseo; 16.08.2019
comment
Тем не менее внутри формы есть внешний цикл myList. Предположим, что он имеет количество 3. А внутренний список stream.types имеет количество 5. Шаблон html добавит 15 входов радиокнопок с дублированием. Я просто догадался, что выходной цикл myList был предназначен для соответствия динамическим строкам в форме. Тогда вам понадобится массив с группой внутри. - person Jens Alenius; 16.08.2019
comment
Да, я думаю, что моя догадка верна. Для каждой «строки» {{stream.sys}} есть метка, так что это динамическая форма. Цикл «строки формы». Мы не знаем, сколько «строк» ​​содержит myList, поэтому вам нужно использовать FormArray. Чтобы модель реактивной формы соответствовала шаблону html - person Jens Alenius; 16.08.2019