Как я могу поместить два ngFor в один div

У меня есть форма, содержащая список флажков.

Я хочу отображать ввод формы перед каждым флажком, когда этот флажок установлен

Это мой html:

<div class = "checkbox">
    <label formArrayName = "coverages" *ngFor = "let coverage of coverageFormArray.controls;let i = index; let val of coverageFormArray.value;">
        <input type = "checkbox" kendoCheckBox [formControlName] = "i"/>
        {{coveragestypes[i]}}
        <div *ngIf = "val">
            <input type = "text">
        </div>
    </label>
</div>

Но здесь форма ввода отображается всегда, независимо от того, установлен флажок или нет! Я думаю, проблема связана с директивой ngFor, где я поставил два цикла let coverage of coverageFormArray.controls и let val of coverageFormArray.value? Кто-нибудь может мне помочь ?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
7 004
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете использовать несколько *ngFor в одном и том же элементе, так как это структурные директивы, и angular обрабатывает их определенным образом (в основном для каждой структурной директивы создается элемент ng-template, который затем содержит саму директиву, вы можете узнать больше об этом здесь : https://angular.io/guide/structural-directives понимание этого действительно проясняет, почему мы не можем иметь несколько структурных директив для одного и того же элемента).

Таким образом, вы не можете использовать два ngFor для одного и того же элемента, но вы можете использовать индекс, если оба массива имеют одинаковый размер, чтобы проверить, есть ли значение.

Вы не привели пример формата данных, поэтому я, вероятно, приведу пример, который придется адаптировать.

<div class = "checkbox">
    <label formArrayName = "coverages" *ngFor = "let coverage of coverageFormArray.controls;let i = index;">
        <input type = "checkbox" kendoCheckBox [formControlName] = "i"/>
        {{ coveragestypes[i] }}
        <div *ngIf = "coverage.value">
            <input type = "text">
        </div>
    </label>
</div>

Кроме того, я рекомендую использовать ng-container вместо тега html, который используется только для применения директивы Angular.

Так что мое окончательное решение будет.

<div class = "checkbox">
    <label formArrayName = "coverages" *ngFor = "let coverage of coverageFormArray.controls;let i = index;">
        <input type = "checkbox" kendoCheckBox [formControlName] = "i"/>
        {{ coveragestypes[i] }}
        <ng-container *ngIf = "coverage.value">
            <input type = "text">
        </ng-container>
    </label>
</div>

Хороший ответ :), я хотел бы добавить, что невозможность использования двух *ngFor связана с тем, что они являются структурными директивами, которые фактически создают ng-template элементы под капотом (как вы можете видеть здесь angular.io/guide/structural-directives). Понимание этого проясняет, почему к одному и тому же элементу можно применять не более одной структурной директивы :)

Dario Piotrowicz 22.12.2020 10:24

@DarioPiotrowicz Это должно быть в ответе. Не могли бы вы добавить его?

Marco 22.12.2020 10:26

Конечно, это будет мое удовольствие :)

Dario Piotrowicz 22.12.2020 10:28

Нет проблем, спасибо за оценку вклада :)

Dario Piotrowicz 22.12.2020 10:47

Другие вопросы по теме