5

swimlane/ngx-datatable我已经使用Angular 4 应用程序设置了一个表格。该表使用该属性scrollbarV,因为它是必需的。我想完全按照他们提供的示例进行操作,并使用滚动条为表格设置固定高度。在附加的来源中,(对我来说)他们如何设置桌子高度并不清楚。所以我的问题是,整个表格的高度到底是如何设置/定义的?

示例来源:

import { Component } from '@angular/core';
import {MockServerResultsService} from "./mock-server-results-service";
import {PagedData} from "./model/paged-data";
import {CorporateEmployee} from "./model/corporate-employee";
import {Page} from "./model/page";

@Component({
  selector: 'virtual-paging-demo',
  providers: [
      MockServerResultsService
  ],
  template: `
<div>
  <h3>
    Virtual Server-side Paging
    <small>
      <a href="https://github.com/swimlane/ngx-datatable/blob/master/demo/paging/paging-virtual.component.ts" target="_blank">
        Source
      </a>
    </small>
  </h3>
  <ngx-datatable
    class="material"
    [rows]="rows"
    [columns]="[{name:'Name'},{name:'Gender'},{name:'Company'}]"
    [columnMode]="'force'"
    [headerHeight]="50"
    [scrollbarV]="true"
    [footerHeight]="50"
    [rowHeight]="50"
    [externalPaging]="true"
    [count]="page.totalElements"
    [offset]="page.pageNumber"
    (page)='setPage($event)'>
  </ngx-datatable>
</div>
  `
})
export class VirtualPagingComponent {

  page = new Page();
  rows = new Array<CorporateEmployee>();
  cache: any = {};

  constructor(private serverResultsService: MockServerResultsService) {
    this.page.pageNumber = 0;
  }

  /**
   * Populate the table with new data based on the page number
   * @param page The page to select
   */
  setPage(pageInfo) {
    this.page.pageNumber = pageInfo.offset;
    this.page.size = pageInfo.pageSize;

    // cache results
    // if(this.cache[this.page.pageNumber]) return;
    this.serverResultsService.getResults(this.page).subscribe(pagedData => {
      this.page = pagedData.page;

  // calc start
  const start = this.page.pageNumber * this.page.size;

  // copy rows
  const rows = [...this.rows];

  // insert rows into new position
  rows.splice(start, 0, ...pagedData.data);

  // set rows to our new rows
  this.rows = rows;

  // add flag for results
  this.cache[this.page.pageNumber] = true;
});
  }

}
4

3 回答 3

8

与您的链接( http://swimlane.github.io/ngx-datatable/#virtual-paging )中的示例相关联的来源具有误导性。

在该示例中,有几件事掩盖了如何计算高度:

  1. 样式实际上是在演示应用程序的 CSS 中设置的。
  2. 演示应用程序中的高度使用vh与视口成比例的单位。垂直调整示例窗口的大小会自动导致示例的高度发生相应的变化。
  3. 文档中没有设置整个表格高度的公共方法,尽管可以设置其他参数,例如列宽和行高。

设置固定高度的最常见方法是仅使用style属性或样式表规则。使用style属性,您可以在定义中添加类似style="height: 300px;"ngx-datatable内容。或者,您可以设置规则定位.ngx-datatable或做一些更精细的操作,例如添加id属性并改为定位,然后添加样式来设置高度。

以下是样式属性应用于您的代码片段时的样子。

<ngx-datatable
    class="material"
    style="height: 300px;"
    [rows]="rows"
    [columns]="[{name:'Name'},{name:'Gender'},{name:'Company'}]"
    [columnMode]="'force'"
    [headerHeight]="50"
    [scrollbarV]="true"
    [footerHeight]="50"
    [rowHeight]="50"
    [externalPaging]="true"
    [count]="page.totalElements"
    [offset]="page.pageNumber"
    (page)='setPage($event)'>
</ngx-datatable>
于 2018-05-21T14:00:35.580 回答
1

我知道这有点晚了,但是如果有人感兴趣,请指向您的 ngx-datatable 组件并从数据表中减去顶部组件的高度

calc(100vh - 160px)
于 2022-02-21T21:09:42.720 回答
0

这对我有用

<ngx-datatable
        #table
        class="material common-m-tbl"
        [columns]="columnList"
        [columnMode]="ColumnMode.force"
        [virtualization]="false"
        [headerHeight]="50"
        [footerHeight]="footerHeight"
        rowHeight="36"
        [scrollbarV]="true"
        [rows]="rows"
        [messages]="messages"
        [externalPaging]="true"
        [count]="page.totalElements"
        [offset]="page.pageNumber"
        [limit]="page.size"
        (page)="setPage($event)"
        [selectionType]="SelectionType.single"
        (sort)="onSort($event)"
        (activate)="onActivate($event)"
        [messages]="messages"
        style="height: 530px;"
      >
于 2020-01-31T06:43:17.237 回答