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

Сценарий:

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

быстрое исправление было

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

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

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


person Akber Iqbal    schedule 23.10.2018    source источник
comment
С height: 100%; он получит высоту родителей, вы можете обрабатывать размер родителей как любой другой div на вашей странице.   -  person ibenjelloun    schedule 23.10.2018
comment
@ibenjelloun, не сработает ... вы можете попробовать здесь angular-efdcyc.stackblitz.io ... но мне не хватает какой-то зависимости, которая должна позаботиться об этом?   -  person Akber Iqbal    schedule 23.10.2018
comment
Имхо, способ стилизовать элемент cdk-virtual-scroll-viewport совершенно произвольный, удачный или неудачный. Свойство itemSize не имеет вообще никакого смысла, поэтому вам придется поиграть со стилями и свойством, пока не получите все правильно. Документация и дизайн компонента - это шутка.   -  person AsGoodAsItGets    schedule 17.05.2019


Ответы (3)


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

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

При использовании наблюдаемого в качестве источника

<ng-container *ngIf="obs$ | async; let data">
  <cdk-virtual-scroll-viewport itemSize="100" class="list">
person dagerber    schedule 04.12.2018
comment
Спасибо за ответ, высота элемента 100 пикселей является произвольной ... (2-й пункт) высота элемента может изменяться во время реакции на размер экрана, поэтому мы не можем получить точное совпадение; - person Akber Iqbal; 06.12.2018

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

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

.example-item {
  height: 50px;
}

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

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

Обновленный Slackblitz

person Pandiyan Cool    schedule 23.10.2018
comment
высота 50 пикселей или 500 пикселей не является точной ... она должна быть привязана к itemSize, который мы определяем в ‹cdk-virtual-scroll-viewport› ... но вы правы, что пример также дал фиксированное число для высоты !! - person Akber Iqbal; 23.10.2018

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

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

.viewport { 
   display: contents;
}
person Rinkesh Patel    schedule 24.09.2020
comment
Добро пожаловать в Stack Overflow. Прежде чем вставлять это в другие места, найдите время, чтобы прочитать Допустимо ли дублировать ответ на несколько вопросов?. - person fcdt; 24.09.2020