PrimeNG p-dataTable 响应式断点

PrimeNG p-dataTable responsive breakpoint

我目前正在为我的 MEAN 应用程序使用 PrimeNG 4.2.0。 代码片段如下:

<div class="ui-g-12" *ngIf="orders">
  <p-dataTable
    [value]="orders"
    [responsive]="true"
    selectionMode="single" 
    [(selection)]="selectedOrder" 
    (onRowDblclick)="onRowSelect($event)"
    styleClass="ordersTable"
  >
    <p-column header="Date" [style]="{'width':'15%'}"> 
      <ng-template let-col let-order="rowData" pTemplate='body'>
        <span>{{order.orderDate | date:'shortDate'}}</span>
      </ng-template>
    </p-column>
    <p-column field="orderNumber" header="ID" [style]="{'width':'15%'}" [filter]="true"></p-column>
    <p-column field="userId" header="Client ID" [style]="{'width':'20%'}"></p-column>
    <p-column header="No. of Products" [style]="{'width':'12%'}">
      <ng-template pTemplate="body" let-col let-order="rowData">
        <span>{{order.orderDetails.length}}</span>
      </ng-template>
    </p-column>
    ...
    <p-footer *ngIf="orders">
      Total orders: {{orders.length}} 
    </p-footer>
  </p-dataTable>
</div> <!--Orders DATA Ends-->

有没有办法为DataTable的响应设置断点?因为 width: 667 (iPhone 6 landscape mode) 的当前结果是可怕的。

在 Chrome Dev Tools 的 Elements 标签上搞了几分钟后,我解决了我的问题。

PrimeNG 数据表响应是在 @media 查询出现的 tbody > tr > td 行的深处实现的。为了确保在我首选的屏幕尺寸上显示的响应能力(每次更改断点),我必须将其添加到我的根 styles.css

    @media (max-width: 1365px) /* I want the datatable to be stacked at at least iPad Pro portrait mode, this depends on your data */ 
{
    /* Data in responsive mode */
    .ui-datatable-reflow .ui-datatable-data > tr > td {
        width: 100% !important;
        text-align: left;
        border: 0;
        box-sizing: border-box;
        float: left;
        clear: left;
    }


    .ui-datatable-reflow .ui-datatable-data tr.ui-widget-content {
        border-left: 0;
        border-right: 0;
    }

    .ui-datatable-reflow .ui-datatable-data.ui-widget-content {
        border: 0;
    }

    /*Hide the headers in responsive mode*/
    .ui-datatable-reflow thead th {
        display: none !important;
    }

    /*Display the headers inline with the data in responsive mode */
    .ui-datatable-reflow .ui-datatable-data td .ui-column-title {
        padding: .4em;
        min-width: 30%;
        display: inline-block;
        margin: -.4em 1em -.4em -.4em;
        font-weight: bold;
    }
}

我有一个非常相似的需求,但使用的是 Table 组件 (p-table),我只能通过设置此 属性 来解决它:[ autoLayout]="true"

示例: 上一个代码:

<p-table [value]="averbacaoList" selectionMode="single" [rows]="5"  [paginator]="true" [alwaysShowPaginator]="false"
>

带有新 属性 集的实际代码:

<p-table [value]="averbacaoList" selectionMode="single" [rows]="5"  [paginator]="true" [alwaysShowPaginator]="false"
  [autoLayout]="true"
>

Chau Tran 的回答适用于 PrimeNG 的旧数据Table,但不适用于他们最近的 Table 组件。根据他的方法,我在 PrimeNG 的 table.css 中找到了必要的 CSS 并且只是将它复制到我的根 styles.scss 中以获得更大的屏幕尺寸(在 PrimeNG 8 中测试):

@media (max-width: 1365px) /* I want the datatable to be stacked at at least iPad Pro portrait mode, this depends on your data */
{
  .ui-table-responsive .ui-table-thead > tr > th,
  .ui-table-responsive .ui-table-tfoot > tr > td {
    display: none !important;
  }

  .ui-table-responsive colgroup {
    display: none !important;
  }

  .ui-table-responsive .ui-table-tbody > tr > td {
    text-align: left;
    display: block;
    border: 0 none;
    width: 100% !important;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    float: left;
    clear: left;
  }

  .ui-table-responsive .ui-table-tbody > tr > td .ui-column-title {
    padding: .4em;
    min-width: 30%;
    display: inline-block;
    margin: -.4em 1em -.4em -.4em;
    font-weight: bold;
  }
}