Проблемы отображения Angular Virtual Scroll

Я пытался найти решение в течение нескольких дней, но не могу найти его.

У нас много загружаемых мат-карт, и мы подумали, что лучше добавить виртуальную прокрутку, однако он сразу же изменил отображение на строки (показывая все мат-карты, уложенные друг под другом). Я пару раз переписывал раздел, но безрезультатно.

<div fxLayout style = "margin-top: 40px" class = "row">
    <cdk-virtual-scroll-viewport [itemSize] = "20" class = "example-viewport">
      <div fxFlex.gt-md = "265px" fxFlex.lg = "265px" *cdkVirtualFor = "let course of courses | courseDrop : typeView | courseTemp: courseSearch">
        <mat-card class = "course-card" >
         ...content
        </mat-card>
      </div>
    </cdk-virtual-scroll-viewport>
  </div>
Тестирование функциональных 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
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Да, это ограничение для виртуальной прокрутки - она ​​работает со строками.

Если вам нужно, чтобы элементы отображались рядом друг с другом, вам нужно разделить их в компоненте на группы и заставить виртуальную прокрутку работать с группами.

Поскольку вы используете точки останова, вам нужно будет поработать над прослушиванием изменений точки останова. Вы можете сделать это с помощью MediaObserver.

Вам нужно будет настроить фильтрацию или сделать это в компоненте. Я опускаю это.

function split<T>(input: T[], groupSize: number): T[][]  {
  const out: T[][] = [];
  for(let i=0; i < input.length; i += groupSize) {
    out.push(input.slice(i, i + groupSize));
  }
  return out;
}


mediaObserver.media$.subscribe((change: MediaChange) => {
      
      if ( change.mqAlias == 'xs') {
         this.viewCourses = split(this.courses,1);
      }
      if ( change.mqAlias == 'md') {
         this.viewCourses = split(this.courses,2);
      }
      if ( change.mqAlias == 'lg') {
         this.viewCourses = split(this.courses,3);
      }
    });


<div fxLayout style = "margin-top: 40px" class = "row">
    <cdk-virtual-scroll-viewport [itemSize] = "20" class = "example-viewport">
      <div *cdkVirtualFor = "let courses of viewCourses">
        <div fxFlex.gt-md = "265px" fxFlex.lg = "265px" *ngFor = "let course of courses">
        <mat-card class = "course-card" >
         ...content
        </mat-card>
        </div>
      </div>
    </cdk-virtual-scroll-viewport>
  </div>

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