Как разместить массив объектов с помощью флажка - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь инициализировать массив атрибутов типа objet, но он не работает. (Извините за мой плохой английский)

МОДЕЛЬ

Actif

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>();
}

CritereActif

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();
}

LesCriteres

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

actif.component.html

<div class="form-group">
    <label>Critères : </label>&nbsp;
    <div class="checkbox-inline" *ngFor="let l of lesCriteres; let i= index">
      <label>
        <input type="checkbox" [value]="l.code" [(ngModel)]="actif.lesCriteresActifs[i].critere.code">{{l.code}}
      </label>
    </div>
</div>

Я хочу добавить в таблицу "lesCritesActifs" каждый элемент "lesCriteres", который будет проверять пользователь.

Все работало до того, как я добавил в строку:

[(ngModel)]="actif.lesCriteresActifs[i].critere.code"

У меня есть эта ошибка в консоли веб-разработки:

ERROR TypeError: "_co.actif.lesCriteresActifs[_v.context.index] is undefined"

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Проблема в том, что ваш lesCriteresActifs пуст и вы пытаетесь получить доступ к одному индексу в .lesCriteresActifs[_v.context.index], поэтому его значение не определено, и вы не можете получить доступ к .critere.code

Частичное решение может быть

[(ngModel)]="actif.lesCriteresActifs[i]?.critere.code"
0 голосов
/ 05 апреля 2019

То, что я вижу, у вас есть массив CritereActif, который должен быть инициализирован. Если вы знаете размер, вы можете использовать цикл for что-то вроде:

for (let i = 0; i<lesCriteresActifs.length; i++){
    let aCritereActif = new CritereActif();
    lesCriteresActifs.push(aCritereActif);  
}

После этого вы можете получить доступ к каждому члену массива, как вы пишете в своей программе [(ngModel)]="actif.lesCriteresActifs[i].critere.code".

...