Виртуальная прокрутка на Angular 7 - высота по умолчанию равна нулю

Сценарий:

  • Попробовал базовый тест виртуальной прокрутки, читая этот пост
  • в массиве было много элементов
  • ошибки не было
  • список загружен в виртуальный свиток, но его высота по умолчанию равна 0

быстрое решение было

  • установите высоту для cdk-virtual-scroll-viewport равной 500 пикселей или установите высоту для класса example-viewport в app.component.css

Вопрос: как правильно преодолеть эту нулевую высоту?

образец на https://stackblitz.com/edit/angular-efdcyc

4 ответа

  • используйте min-height 100% для области просмотра и проверьте
  • убедитесь, что высота, заданная в области просмотра с помощью itemSize, соответствует высоте элемента в CSS
  • если вы используете Observable, обязательно разрешите его с помощью * ngIf и асинхронного канала. Важно: элемент html является контейнером ng, потому что он может не отображаться для минимальной ширины!

      .list {
         min-height: 100%;
      }
    
      .item {
         height: 100px;
      }
    

При использовании Observable в качестве источника

<ng-container *ngIf="obs$ | async; let data">
  <cdk-virtual-scroll-viewport itemSize="100" class="list">

Добавьте необходимые стили CSS, чтобы обеспечить высоту элемента

.example-viewport {
  height: 200px;
  width: 200px;
  border: 1px solid black;
}

.example-item {
  height: 50px;
}

Вы можете увидеть полное содержание примера, который вы упомянули здесь. https://material.angular.io/cdk/scrolling/overview

Они также использовали собственный CSS для стилизации своих элементов.

Обновлен Slackblitz

Этот CSS работает для меня (фиксированная высота не требуется):

<cdk-virtual-scroll-viewport class="viewport">  
   .......
</cdk-virtual-scroll-viewport>

.viewport { 
   display: contents;
}

Из этих ответов мне нравится один сdisplay: contents;больше всего потому, что у него нет % или px.

Это также сработало для меня:

      cdk-virtual-scroll-viewport { 
    contain: none;
}
Другие вопросы по тегам