Как создать список флажков в Angular, связанных с ngModel и другими параметрами, полученными из JSON

Я работаю над Ангуляром. Я сделал список флажков с определенным значением ngModel для каждого флажка. Для этого я создал JSON в файле компонента TS. JSON выглядит так:

  test = [
    {id: 'model1', site: '1', label: 'Clocher', view: 'file_clocher'},
    {id: 'model2', site: '1', label: 'Moulin', view: 'file_moulin'},
    {id: 'model3', site: '1', label: 'Poisson', view: 'file_poisson'},
    {id: 'model4', site: '2', label: 'Lacs', view: 'file_lac'},
    {id: 'model5', site: '2', label: 'Relais', view: 'file_relais'},
    {id: 'model6', site: '3', label: 'Citadelle', view: 'file_citadelle'},
]

В файле HTML есть следующий «код флажка»:

<div *ngFor = "let j of test">
<div *ngIf = "j.site == '1'" class = "form-check">
<input class = "form-check-input" type = "checkbox" [(ngModel)] = "j.id" (change) = "displayData($event)" name = "{{j.view}}"/>
<label class = "form-check-label">{{j.label}}</label>
</div>
</div>

displayData($event) должен позволить мне проверить параметр name флажка.
Итак, в моем файле TS я указал ...

displayData(event: any){
  console.info(event.target.name);
}

... и console.info должен получить, например, «file_clocher», если я поставлю первый флажок.

Но на самом деле у меня две проблемы:

  1. Все галочки уже установлены, что удивительно
  2. Когда я устанавливаю первый флажок, console.info возвращает «undefined», тогда как он должен возвращать, например, «file_clocher» (я пытаюсь сделать это вручную, без JSON, это работает)

Не подскажете, как это можно исправить?

Спасибо за вашу помощь.

Тестирование функциональных 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
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

У вас есть несколько проблем: ngmodel для ввода — это фактическое значение для этого поля ввода, которое в случае флажка является логическим. Поскольку j.id определен, он имеет истинное значение, поэтому все они проверяются изначально. Вы, вероятно, хотите, чтобы другая переменная была определена для отслеживания того, проверяются ли эти входные данные.

вы должны иметь возможность установить имя с помощью [name]='j.view' или изменить функцию, чтобы просто передать имя представления с помощью (change) = "displayData(j.view)"

Спасибо за Ваш ответ. Означает ли это, что я не должен добавлять ngModel? Если да, то как я могу указать, когда нужно снять флажок в файле TS (мне в этом помог ngModel).

Julien 09.12.2022 17:12

Вы можете добавить еще одно поле в свой объект «j», например test = [ {id: 'model1', site: '1', label: 'Clocher', view: 'file_clocher', value: false}, ..., а затем ссылаться на него на входе, например [(ngModel)] = "j.value"

justin 09.12.2022 17:37

Хорошо, отлично, все работает, все это начинает иметь для меня смысл! Последний вопрос, если осмелюсь... можно ли написать в файле TS что-то вроде j.value=false, если я хочу снять один из флажков с помощью ngModel? Еще раз спасибо!

Julien 09.12.2022 17:54

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

justin 09.12.2022 18:02

Отлично, я проверю это и сделаю несколько попыток! Спасибо за ссылку. Если то, что я попробую, не сработает, могу я задать вам еще один вопрос (надеюсь, последний)? :)

Julien 09.12.2022 18:08

Хорошо, понял, после многих попыток мне наконец удалось сделать то, что я хотел. Большое спасибо за вашу помощь @Justin !!

Julien 19.12.2022 17:37

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