NgIf может ссылаться на переменную во вложенном ngFor в Angular 1.5. Как добиться того же в Angular 10?

Следующий код работает в Angular 1.5. Элемент <tr> будет отображаться только в том случае, если флаг showFields для этого ключа строки включен.

<table>
  <ng-container *ngIf = "showFields[row.key]">
    <tr *ngFor = "let row of rows">
      <td>{{row.key}}</td>
      <td>{{row.value}}</td>
    </tr>
  </ng-container>
</table>

Обратите внимание, что переменная row из ngFor видна для включающего ngIf. Это больше не работает в Angular 2+, потому что область действия переменной ngFor теперь ограничена элементом. Как я мог добиться такого же эффекта?

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

Ответы 1

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

Вы можете просто поменять местами ngFor и ngIf, вот так:

<table>
  <ng-container *ngFor = "let row of rows">
    <tr *ngIf = "showFields[row.key]">
        <td>{{row.key}}</td>
        <td>{{row.value}}</td>
    </tr>
  </ng-container>
</table>

Вместо использования отдельного логического массива showFields вы также можете подумать о добавлении нового свойства showField к объекту строки, тогда вы можете просто проверить *ngIf = "row.showField", что предотвращает исключения за пределами границ.

Извините, я должен был упомянуть, что я попробовал, и это не сработало. Но оказалось, что это не сработало по другой причине. Моя переменная rows — это объект, а не массив. Поэтому мне нужно было сделать это *ngFor = "let row of rows | keyvalue", чтобы он работал с Angular 10. Ваш ответ правильный, хотя в соответствии с заданным вопросом. Большое спасибо.

KevinS 10.12.2020 11:04

Кроме того, showFields является объектом, поэтому здесь нет проблем с границами, и его содержимое динамически изменяется, когда пользователь нажимает переключатели в пользовательском интерфейсе, чтобы показать или скрыть поля. Однако оцените помощь.

KevinS 10.12.2020 11:08

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