Ng-template не запускается, когда данные становятся пустыми

Я использую список ul, который отображает данные из массива, массив изначально пуст, для которого я использовал другой «пустой» шаблон, вот код:

<ul class = "list-group" *ngIf = "data else empty">
  <li *ngFor = "let num of data">
    <span>{{num}}</span>
  </li>
</ul>

<button class = "btn btn-sm btn-primary" (click) = "fillData()">Fill</button>
<button class = "btn btn-sm btn-primary" (click) = "clearData()">clear</button>

<ng-template #empty>
  <span>.... list empty....</span>
</ng-template>

Теперь сценарий для приведенного выше кода выглядит следующим образом

export class QlistComponent implements OnInit {

  data: any[];

  fillData() {
    this.data = [1, 2, 3];
  }

  clearData() {
    this.data = [];
  }

}

Проблема: По какой-то странной причине шаблон #пустой запускается только один раз в начале, когда данные пусты, но как только данные заполняются fillData(), а затем снова очищаются clearData(), шаблон #пустой не запускается

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

Ответы 2

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

В экспрессии *ngIf проверьте data.length, а не данные:

<ul class = "list-group" *ngIf = "data.length else empty">
      <li *ngFor = "let num of data">
        <span>{{num}}</span>
      </li>
    </ul>

В вашем случае *ngIf проверяет, существуют ли массивы. Когда вы очистили данные, ссылки все еще там ПРИМЕР КОДА

Привет, попробуйте следующий код:

в файле .html

<ul class = "list-group" *ngIf = "data.length>0 else empty">
  <li *ngFor = "let num of data">
    <span>{{num}}</span>
  </li>
</ul>

<button class = "btn btn-sm btn-primary" (click) = "fillData()">Fill</button>
<button class = "btn btn-sm btn-primary" (click) = "clearData()">clear</button>

<ng-template #empty>
  <span>.... list empty....</span>
</ng-template>

.ts файл

data: any[]=[];

  fillData() {
    this.data = [1, 2, 3];
  }

  clearData() {
    this.data = [];
  }

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