Как использовать *Ngfor в другом *Ngfor

Я пытаюсь создать флажок для каждого элемента массива «lesCriteres». Затем я хочу, чтобы каждый из этих флажков был проверен, если его значение находится в таблице "actif.lesCriteresActifs"

Вот код, который я хочу, но он не работает так, как я хочу

<div class = "checkbox-inline" *ngFor = "let l of lesCriteres">
    <div *ngFor = "let a of actif.lesCriteresActifs">
        <label></label>
        <input type = "checkbox" (change) = "onChangeEvent(l.code, $event.target.checked)" [checked] = "a.critere.code==l.code"> {{l.code}}<br>
     </div>
</div>

МОДЕЛИ

актиф модель

import {TypeActif} from './model.type-actif';
import {CritereActif} from './model.critere-actif';

export class Actif{
  ref: string;
  nom: string = '';
  type_actif: TypeActif = new TypeActif ();
  lesCriteresActifs: Array<CritereActif> = new Array<CritereActif>();
}

Модель CritereActive

import {Actif} from './model.actif';
import {LesCriteres} from './model.les-criteres';
import {LesValeurs} from './model.les-valeurs';

export class CritereActif{
  id: number;
  actif: Actif = new Actif ();
  critere: LesCriteres = new LesCriteres();
  valeur: LesValeurs = new LesValeurs();
}

Модель ЛесКритерес

export class LesCriteres{
  code: string = null;
  nom: string = '';
}

РЕЗУЛЬТАТ

у меня есть это, когда я выполняю свой код:

Как использовать *Ngfor в другом *Ngfor

но я не хочу что-то вроде этого:

Как использовать *Ngfor в другом *Ngfor

Я не понимаю, почему вы используете индекс. Как только вы напишете «let a of actif.lesCriteresActifs; let i=index», тогда actif.lesCriteresActifs[i], который вы будете использовать позже в коде, будет тем же самым, что и «a»! :D И извините, я до сих пор не совсем понимаю, чего вы хотите добиться.

druskacik 07.04.2019 03:06

ты прав, я отредактировал

PowerGirl 07.04.2019 03:17

каждый флажок имеет значение. Я хочу посмотреть, существует ли его значение в a.critere. если он существует, я проверяю его! извините, может быть, это из-за моего английского :(

PowerGirl 07.04.2019 03:20

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

druskacik 07.04.2019 03:56

Оно работает !!! всем спасибо :)

PowerGirl 07.04.2019 04:08
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
5
345
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это должно работать (используя метод include(), без дополнительных *ngFor):

<div class = "checkbox-inline" *ngFor = "let l of lesCriteres">
        <label></label>
        <input type = "checkbox" (change) = "onChangeEvent(l.code, $event.target.checked)" [checked] = "actif.lesCriteresActifs.includes(l)"> {{l.code}}<br>
</div>

О методе включает: https://www.w3schools.com/jsref/jsref_includes_array.asp

Обновлено:

Это решение приходит на ум. В файле .ts вашего компонента внутри класса объявите функцию:

containsCode = (code) => {
    for (let a of this.actif.lesCriteresActifs) {
        if (a.critere.code === code) {
            return true
        }
    }
    return false

Затем в файле .html:

<div class = "checkbox-inline" *ngFor = "let l of lesCriteres">
        <label></label>
        <input type = "checkbox" (change) = "onChangeEvent(l.code, $event.target.checked)" [checked] = "containsCode(l.code)"> {{l.code}}<br>
</div> 

Сравнение проводится не между элементом actif.lesCriteresActifs и элементом lesCriteres, а между элементом lesCriteresActifs.critere и элементом lesCriteres, поэтому мне нужен индекс элемента lesCriteresActifs

PowerGirl 07.04.2019 02:01

Я не уверен, что правильно понимаю. Тогда в вашем коде вам не нужен индекс элемента «l», а не элемента «a»?

druskacik 07.04.2019 02:16

Взгляд на некоторые из ваших данных поможет.

druskacik 07.04.2019 02:20

Да ! я не силен в английском!! подождите, я отредактирую свой пост, чтобы вы лучше поняли

PowerGirl 07.04.2019 02:23

Вы понимаете теперь ?

PowerGirl 07.04.2019 02:30

Не совсем :D Например, если l является вторым элементом lesCriteres, вы хотите посмотреть на второй элемент lesCriteresActifs? Вот почему вам нужен индекс?

druskacik 07.04.2019 02:33

lesCritere представляет собой массив: он содержит 2 экземпляра Criteres [{code: C, nom: Confidentialité}, {code: I, nom: Integrité}] ==> поэтому обычно у меня есть 2 флажка [C и I]

PowerGirl 07.04.2019 02:42

Второй массив — lesCriteresAcifs! я хочу проверить, есть ли элемент, который имеет то же значение, что и мои флажки. если есть, то я хочу проверить это

PowerGirl 07.04.2019 02:44

вот почему я не хочу использовать индекс lesCriteresActifs и сравнивать каждый элемент lesCriteresActifs [index].critere с lesCriteres

PowerGirl 07.04.2019 02:48

посмотрите на картинку ! код дает мне 4 флажка вместо 2 флажков

PowerGirl 07.04.2019 02:49

Позвольте мне задать вам вопрос. совпадают ли индексы Criteres и lesCriteresActifs? Что означает 2 элемента в Criteres, строго 2 элемента в lesCriteresActifs и 1-й элемент Criteres сопоставляются с 1-м элементом lesCriteresActifs?

javapedia.net 07.04.2019 02:56

Нет ! Потому что есть некоторые элементы lesCriteres, которых нет в lesCriteresActifs.critere.

PowerGirl 07.04.2019 03:00

Вы получили 2 флажка после того, как попробовали Ответ Роберта Друска или даже раньше?

javapedia.net 07.04.2019 03:41

Его ответ не работает, потому что он проверяет, если "actif.lesCriteresActifs.includes(l)" вместо проверки, если "actif.lesCriteresActifs[i].critere.includes(l)" ! я имею в виду сравнение между "a.critere" и "critere" вместо "a" и "critere"

PowerGirl 07.04.2019 03:49

Большое спасибо @Róbert Druska !!

PowerGirl 07.04.2019 04:10

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