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

#html #css #angular #twitter-bootstrap

#HTML #css #угловой #twitter-bootstrap

Вопрос:

Проблема

В настоящее время я внедряю <mat-table> с <mat-paginator> прикрепленным к нему. Единственная проблема заключается в том, что выпадающий список элементов на странице смещен влево. Для того, что кажется выходящим за рамки начальной загрузки container .

Вот изображение того, что происходит. Вы можете видеть, что расположение выпадающего списка и элементов совершенно неверно. Смещение


Код

Весь мой сайт находится внутри контейнера начальной загрузки, поэтому мой app.component.html в основном выглядит следующим образом:

 <app-header></app-header>
<div class="container mt-3">
  <router-outlet></router-outlet>
</div>
<app-footer></app-footer>
  

Страница в вопросах — это просто таблица материалов с добавленной нумерацией страниц внизу.

 <div class="row">
  <div class="col-md-12">
    <mat-table *ngIf="items" [dataSource]="items" matSort>

      <!-- ID Column -->
      <ng-container matColumnDef="type">
        <mat-header-cell *matHeaderCellDef mat-sort-header> Type </mat-header-cell>
        <mat-cell *matCellDef="let row"> {{row.type}} </mat-cell>
      </ng-container>

      <!-- Provider Column -->
      <ng-container matColumnDef="provider">
        <mat-header-cell *matHeaderCellDef mat-sort-header> Provider </mat-header-cell>
        <mat-cell *matCellDef="let row"> <a href="https://eosauthority.com/account/{{row.provider}}" target="_blank">{{row.provider}}</a> </mat-cell>
      </ng-container>

      <!-- Name Column -->
      <ng-container matColumnDef="url">
        <mat-header-cell *matHeaderCellDef mat-sort-header> URL </mat-header-cell>
        <mat-cell *matCellDef="let row"> {{row.url}} </mat-cell>
      </ng-container>

      <!-- Color Column -->
      <ng-container matColumnDef="country">
        <mat-header-cell *matHeaderCellDef mat-sort-header> Country </mat-header-cell>
        <mat-cell *matCellDef="let row"> {{row.country}} - <span class="flag-icon flag-icon-{{row.country | lowercase}}"></span> </mat-cell>
      </ng-container>

      <!-- Color Column -->
      <ng-container matColumnDef="updated_on">
        <mat-header-cell *matHeaderCellDef mat-sort-header> Updated </mat-header-cell>
        <mat-cell *matCellDef="let row"> {{row.updated_on}} </mat-cell>
      </ng-container>

      <mat-header-row *matHeaderRowDef="['type', 'provider', 'url', 'country', 'updated_on']"></mat-header-row>
      <mat-row *matRowDef="let row; columns: ['type', 'provider', 'url', 'country', 'updated_on']">
      </mat-row>
    </mat-table>

    <mat-paginator [pageSizeOptions]="[5, 10, 25, 100]"></mat-paginator>
  </div>
</div>
  

Ответ №1:

Кажется, что некоторые css необходимы. Просто попробуйте включить в свой style.css или style.scss строку

 @import "../node_modules/@angular/material/prebuilt-themes/indigo-pink.css";
  

Ответ №2:

Наконец-то я могу решить эту проблему = D Мы знаем, что какой-то css-код Angular перезаписал исходный css-код разбивки на страницы, который работает с cdk-overlay-container. Вот почему я попытался скопировать код из файла @angular/cdk/overlay-prebuilt.css в мой собственный css-файл, что исправило ошибку. После этого я посмотрел, какие компоненты мне действительно нужны, и все:

 //Add this to your css/scss File
::ng-deep {
  .cdk-overlay-container,
  .cdk-global-overlay-wrapper {
    pointer-events: none;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
  }
  .cdk-overlay-container {
    position: fixed;
    z-index: 1000;
  }

  .cdk-overlay-pane {
    position: absolute;
    pointer-events: auto;
    box-sizing: border-box;
    z-index: 1000;
    display: flex;
    max-width: 100%;
    max-height: 100%;
  }
}
  

Теперь у вас есть исходная разбивка на страницы Angular, если вы хотите непрозрачную выборку dropbox, добавьте следующие строки в .cdk-overlay-pane

 background-color: white;
border: 1px solid rgba(128, 128, 128);
  

Ответ №3:

 import { MatPaginatorModule } from '@angular/material/paginator';
  

Вы импортировали модуль разбиения материалов на страницы? Если нет, то, пожалуйста, импортируйте и повторите попытку. Спасибо

Комментарии:

1. Я импортировал его, это не имеет значения.

2. Можете ли вы поделиться fiddle для этого, потому что с моей стороны это нормально работает

Ответ №4:

В большинстве проектов, будь то на тему boostrap или material, обычно есть папка theme, в которой будут файлы типа theme-variable.scss и theme.scss для проектов Bootstrap, в то время как в проектах material вы найдете material-theme.css or material-theme.scss .

Последние два файла очень важны для правильного отображения компонентов angular-material, даже после импорта модулей, отвечающих за компонент, вам понадобятся файлы, упомянутые выше.

Убедившись, что у вас есть эти два файла, вы хотите импортировать их в свой styles.css файл с помощью этой строки: @import './theme/material-theme.css';

После выполнения вышеуказанных шагов таблица или любой другой компонент angular-material будет отображаться правильно.