Компонент внутри Mat-tab: как прокручивать внутренний компонент

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

Я попытался добавить «переполнение: авто» в этих разделах:

  1. в селекторе (таблица посещаемости приложений)
  2. внутри табличного компонента
  3. ::ng-deep {.mat-tab-body {переполнение: авто}}
  4. на селекторе (mat-tab-group)
  5. завернутый (таблица посещаемости приложений) в (ng-контейнер) или (div) и добавление переполнения: авто

Это внешний компонент с вкладками:

  <ng-container>
    <mat-form-field class = "date">
      <input
        matInput
        [matDatepicker] = "picker"
        placeholder = "Select a Date"
        (dateInput) = "addEvent($event)"
        [(ngModel)] = "currentDate"
      />
      <mat-datepicker-toggle matSuffix [for] = "picker"></mat-datepicker-toggle>
      <mat-datepicker #picker></mat-datepicker>
    </mat-form-field>
  </ng-container>
  <mat-tab-group>
    <ng-container *ngFor = "let grade of result; let i = index">
      <mat-tab *ngIf = "grade.length > 0" [label] = "grades[i]">
        <app-attendance-table [dataSource] = "grade"></app-attendance-table>
      </mat-tab>
    </ng-container>
  </mat-tab-group>
  <div *ngIf = "this.result.length < 1 && !this.loading">
    No Records Found for The Date: {{ currentDate.toDateString() }}
  </div>
  <mat-spinner *ngIf = "this.loading"> </mat-spinner>
</div>

Это сам фактический компонент таблицы:

  <mat-table #table [dataSource] = "dataSource">


    <ng-container matColumnDef = "name">
      <mat-header-cell *matHeaderCellDef> Student Name </mat-header-cell>
      <mat-cell *matCellDef = "let student"
        ><span
          [ngClass] = "{
            absent: student.isAbsent() && !student.Reason,
            finished: student.isAbsent() && student.Reason && !student.editing
          }"
        >
          {{ student.Name }}
        </span>
      </mat-cell>
    </ng-container>

    <ng-container matColumnDef = "grade">
      <mat-header-cell *matHeaderCellDef> Student Grade </mat-header-cell>
      <mat-cell
        [ngClass] = "{
          absent: student.isAbsent() && !student.Reason,
          finished: student.isAbsent() && student.Reason && !student.editing
        }"
        *matCellDef = "let student"
      >
        {{ student.Grade }}
      </mat-cell>
    </ng-container>

    <ng-container matColumnDef = "status">
      <mat-header-cell *matHeaderCellDef> Status </mat-header-cell>
      <mat-cell
        [ngClass] = "{
          absent: student.isAbsent() && !student.Reason,
          finished: student.isAbsent() && student.Reason && !student.editing
        }"
        *matCellDef = "let student"
      >
        {{ student.Status }}
      </mat-cell>
    </ng-container>


    <ng-container matColumnDef = "reason">
      <mat-header-cell *matHeaderCellDef> Reason </mat-header-cell>
      <mat-cell *matCellDef = "let student">
        <mat-form-field
          class = "reasons"
          *ngIf = "!student.isPresent()"
          appearance = "outline"
        >
          <mat-select
            [(ngModel)] = "student.Reason"
            [disabled] = "!student.editing"
            placeholder = "Select Reason"
            (selectionChange) = "makeChange(student)"
          >
            <mat-option
              *ngFor = "let reason of reasons; let i = index"
              [value] = "reason"
              [disabled] = "student.Reason === reason"
            >
              {{ reason }}
            </mat-option>
          </mat-select>
        </mat-form-field>
      </mat-cell>
    </ng-container>

    <ng-container matColumnDef = "comments">
      <mat-header-cell *matHeaderCellDef> Comments </mat-header-cell>
      <mat-cell *matCellDef = "let student">
        <mat-form-field *ngIf = "!student.isPresent()">
          <input
            matInput
            [(ngModel)] = "student.Comments"
            [disabled] = "!student.editing"
            (input) = "makeChange(student)"
          />
        </mat-form-field>
      </mat-cell>
    </ng-container>

    <ng-container matColumnDef = "edit">
      <mat-header-cell *matHeaderCellDef> </mat-header-cell>
      <mat-cell *matCellDef = "let student">
        <button
          *ngIf = "!student.isPresent() && !student.editing"
          mat-raised-button
          color = "primary"
          (click) = "startEditing(student)"
        >
          Edit
        </button>
        <button
          *ngIf = "!student.isPresent() && student.editing"
          mat-raised-button
          color = "warn"
          (click) = "saveEdits(student)"
        >
          Finish
        </button>
      </mat-cell>
    </ng-container>

    <mat-header-row *matHeaderRowDef = "displayedColumns"></mat-header-row>
    <mat-row *matRowDef = "let row; columns: displayedColumns"></mat-row>
  </mat-table>
</div>

Компонент внутри Mat-tab: как прокручивать внутренний компонент

Оберните <app-attendance-table [dataSource] = "grade"></app-attendance-table> в div, зафиксируйте его высоту и установите автопрокрутку. Это должно решить вашу проблему.

julianobrasil 03.06.2019 02:44
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
3 602
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Чтобы убедиться, что таблица прокручивается, оберните таблицу внутри div с фиксированной высотой и сделайте ее overflow: auto.

Вы также можете проверить ссылки ниже, которые имеют как страницу, так и таблицу, которые можно прокручивать.

  1. https://angular-qfqpwr.stackblitz.io (рабочий стек-блиц)
  2. https://material.angular.io/components/table/examples (таблица с закрепленным заголовком)

Чтобы расширить ответ @Pankaj Prakash, вы должны установить для свойства переполнения внешнего контейнера значение overflow: hidden.

Затем оберните div вокруг ячеек мата и установите свойство на overflow: scroll. Если вам нужна только вертикальная прокрутка, вы также можете установить следующее свойство: overflow-y: scroll

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