PrimeNG v10.0.0,当 [responsive]='true' 且网格响应时,p-table 页脚消失
PrimeNG v10.0.0, p-table footer disappears when [responsive]='true' and grid is responsive
我正在构建一个周费用报告组件。报告应该是响应式的,所以我在正文中有详细信息,在页脚中有列总数。
我在 Angular 10 应用程序中使用 PrimeNG 库。这是一个 PrimeNG CSS 问题。费用报表通常显示页眉、正文和页脚。当支出报告响应时,它只显示正文。这似乎是由 Primefaces 根据以下 table.css 文件设计的:
@media screen and (max-width: 40em) {
.p-datatable.p-datatable-responsive .p-datatable-thead > tr > th,
.p-datatable.p-datatable-responsive .p-datatable-tfoot > tr > td {
display: none !important;
}
...
我正在尝试让页脚显示,但一直没有成功。当我查看 Chrome 开发人员工具时,我看到上面的 table.css 已经覆盖了我在以下应用程序 [=49 中的 CSS =] 文件:
@media screen and (max-width: 40em) {
.p-datatable.p-datatable-responsive .p-datatable-tfoot > tr > td {
text-align: left;
display: block;
width: 100%;
float: left;
clear: left;
border: 0 none;
}
.p-datatable.p-datatable-responsive .p-datatable-tfoot > tr > td .p-column-title {
padding: .4rem;
min-width: 30%;
display: inline-block;
margin: -.4em 1em -.4em -.4rem;
font-weight: bold;
}
}
我基本上从 table.css 中取出上面的 CSS 并将其更改为 tfoot 而不是 tbody。我在 Chrome 开发者工具中看到上面的 CSS 在 table.css 的 CSS 下面,但是 显示:块; 行有删除线。
我的 CSS 在 angular.json 文件中设置如下:
angular.json
"build": {
...,
"styles": [
"node_modules/bootstrap/dist/css/bootstrap-grid.min.css",
"node_modules/primeng/resources/themes/nova/theme.css",
"node_modules/primeng/resources/primeng.min.css",
"node_modules/primeicons/primeicons.css",
"src/styles.css"
],
以下是演示该问题的示例组件。
<p-table id='weekTotals-grid' [value]='items' dataKey='ExpenseTypeId' [responsive]='true'>
<ng-template pTemplate='header'>
<tr>
<th style='width: 170px;'></th>
<th><div style='width: 100px;'>Total</div></th>
</tr>
</ng-template>
<ng-template pTemplate='body' let-rowData>
<tr>
<td>
<span class='p-column-title'>Expense Type</span>
{{ rowData['ExpenseType'] }}
</td>
<td>
<span class='p-column-title'>Total</span>
<div style='width: 80px;' class='nsg-wet-numeric'>
{{ rowData['ExpenseTotal'] }}
</div>
</td>
</tr>
</ng-template>
<ng-template pTemplate='footer' style='border-top: 1px solid black;'>
<tr>
<td>Totals</td>
<td>
<span class='p-column-title'>Grand Total</span>
{{ grandTotal }}
</td>
</tr>
</ng-template>
</p-table>
打字稿代码:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
items: any[];
grandTotal: number;
ngOnInit() {
this.items = [
{ExpenseTypeId: 1, ExpenseType: 'Gas', ExpenseTotal: 20.0},
{ExpenseTypeId: 2, ExpenseType: 'Food', ExpenseTotal: 12.88},
{ExpenseTypeId: 3, ExpenseType: 'Mileage', ExpenseTotal: 5.50}
];
this.grandTotal = 38.38;
}
}
谢谢
我尝试了 root: ng-deep::,但我无法让它工作。因此,我了解了 StackBlitz 示例的工作原理,而不是使用 [responsive]='true',而是使用 class,如下所示:
/* Responsive styleClass='p-datatable-responsive-footer' */
.p-datatable-responsive-footer .p-datatable-tbody > tr > td .p-column-title,
.p-datatable-responsive-footer .p-datatable-tfoot > tr > td .p-column-title {
display: none;
}
@media screen and (max-width: 40em) {
.p-datatable-responsive-footer .p-datatable-thead > tr > th {
display: none !important;
}
.p-datatable-responsive-footer .p-datatable-tbody > tr > td,
.p-datatable-responsive-footer .p-datatable-tfoot > tr > td {
text-align: left;
display: block;
width: 100%;
float: left;
clear: left;
border: 0 none;
}
.p-datatable-responsive-footer .p-datatable-tbody > tr > td .p-column-title,
.p-datatable-responsive-footer .p-datatable-tfoot > tr > td .p-column-title {
padding: .4rem;
min-width: 30%;
display: inline-block;
margin: -.4em 1em -.4em -.4rem;
font-weight: bold;
}
}
我将以上内容放在应用程序 style.css 文件中。我认为这个解决方案有一些变化可以用于任何 HTML table。确保使用大写 C (styleClass)。
<p-table id='weekTotals-grid' [value]='items' dataKey='ExpenseTypeId' styleClass='p-datatable-responsive-footer'>
...
</p-table>
我正在构建一个周费用报告组件。报告应该是响应式的,所以我在正文中有详细信息,在页脚中有列总数。
我在 Angular 10 应用程序中使用 PrimeNG 库。这是一个 PrimeNG CSS 问题。费用报表通常显示页眉、正文和页脚。当支出报告响应时,它只显示正文。这似乎是由 Primefaces 根据以下 table.css 文件设计的:
@media screen and (max-width: 40em) {
.p-datatable.p-datatable-responsive .p-datatable-thead > tr > th,
.p-datatable.p-datatable-responsive .p-datatable-tfoot > tr > td {
display: none !important;
}
...
我正在尝试让页脚显示,但一直没有成功。当我查看 Chrome 开发人员工具时,我看到上面的 table.css 已经覆盖了我在以下应用程序 [=49 中的 CSS =] 文件:
@media screen and (max-width: 40em) {
.p-datatable.p-datatable-responsive .p-datatable-tfoot > tr > td {
text-align: left;
display: block;
width: 100%;
float: left;
clear: left;
border: 0 none;
}
.p-datatable.p-datatable-responsive .p-datatable-tfoot > tr > td .p-column-title {
padding: .4rem;
min-width: 30%;
display: inline-block;
margin: -.4em 1em -.4em -.4rem;
font-weight: bold;
}
}
我基本上从 table.css 中取出上面的 CSS 并将其更改为 tfoot 而不是 tbody。我在 Chrome 开发者工具中看到上面的 CSS 在 table.css 的 CSS 下面,但是 显示:块; 行有删除线。
我的 CSS 在 angular.json 文件中设置如下:
angular.json
"build": {
...,
"styles": [
"node_modules/bootstrap/dist/css/bootstrap-grid.min.css",
"node_modules/primeng/resources/themes/nova/theme.css",
"node_modules/primeng/resources/primeng.min.css",
"node_modules/primeicons/primeicons.css",
"src/styles.css"
],
以下是演示该问题的示例组件。
<p-table id='weekTotals-grid' [value]='items' dataKey='ExpenseTypeId' [responsive]='true'>
<ng-template pTemplate='header'>
<tr>
<th style='width: 170px;'></th>
<th><div style='width: 100px;'>Total</div></th>
</tr>
</ng-template>
<ng-template pTemplate='body' let-rowData>
<tr>
<td>
<span class='p-column-title'>Expense Type</span>
{{ rowData['ExpenseType'] }}
</td>
<td>
<span class='p-column-title'>Total</span>
<div style='width: 80px;' class='nsg-wet-numeric'>
{{ rowData['ExpenseTotal'] }}
</div>
</td>
</tr>
</ng-template>
<ng-template pTemplate='footer' style='border-top: 1px solid black;'>
<tr>
<td>Totals</td>
<td>
<span class='p-column-title'>Grand Total</span>
{{ grandTotal }}
</td>
</tr>
</ng-template>
</p-table>
打字稿代码:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
items: any[];
grandTotal: number;
ngOnInit() {
this.items = [
{ExpenseTypeId: 1, ExpenseType: 'Gas', ExpenseTotal: 20.0},
{ExpenseTypeId: 2, ExpenseType: 'Food', ExpenseTotal: 12.88},
{ExpenseTypeId: 3, ExpenseType: 'Mileage', ExpenseTotal: 5.50}
];
this.grandTotal = 38.38;
}
}
谢谢
我尝试了 root: ng-deep::,但我无法让它工作。因此,我了解了 StackBlitz 示例的工作原理,而不是使用 [responsive]='true',而是使用 class,如下所示:
/* Responsive styleClass='p-datatable-responsive-footer' */
.p-datatable-responsive-footer .p-datatable-tbody > tr > td .p-column-title,
.p-datatable-responsive-footer .p-datatable-tfoot > tr > td .p-column-title {
display: none;
}
@media screen and (max-width: 40em) {
.p-datatable-responsive-footer .p-datatable-thead > tr > th {
display: none !important;
}
.p-datatable-responsive-footer .p-datatable-tbody > tr > td,
.p-datatable-responsive-footer .p-datatable-tfoot > tr > td {
text-align: left;
display: block;
width: 100%;
float: left;
clear: left;
border: 0 none;
}
.p-datatable-responsive-footer .p-datatable-tbody > tr > td .p-column-title,
.p-datatable-responsive-footer .p-datatable-tfoot > tr > td .p-column-title {
padding: .4rem;
min-width: 30%;
display: inline-block;
margin: -.4em 1em -.4em -.4rem;
font-weight: bold;
}
}
我将以上内容放在应用程序 style.css 文件中。我认为这个解决方案有一些变化可以用于任何 HTML table。确保使用大写 C (styleClass)。
<p-table id='weekTotals-grid' [value]='items' dataKey='ExpenseTypeId' styleClass='p-datatable-responsive-footer'>
...
</p-table>