【问题标题】:How to add style class to p-dataTable row如何将样式类添加到 p-dataTable 行
【发布时间】:2017-03-24 13:03:24
【问题描述】:

我们使用来自 PrimeNG 1.0.0-beta.16 的 p-dataTable

我想在值为 true 时向行添加样式。 我想出了如何对单元格执行此操作,但我需要整行更改其背景。

<p-dataTable [hidden]="loading" [value]="timePeriods" scrollable="true" scrollHeight="400px" rowStyleClass="missingPeriod">
    <p-column field="StartDate" header="Begindatum" sortable="false">
        <template let-col let-timePeriod="rowData" pTemplate type="body">
            <span [class.missingPeriod]="!timePeriod.IsNext">{{timePeriod.StartDate | date: 'dd-MM yyyy'}}</span>
        </template>
    </p-column>
    <p-column field="EndDate" header="Einddatum" sortable="false">
        <template let-col let-timePeriod="rowData" pTemplate type="body">
            <span>{{timePeriod.EndDate | date: 'dd-MM yyyy'}}</span> 
        </template>
    </p-column>
</p-dataTable>

&lt;span [class.missingPeriod]="!timePeriod.IsNext"&gt; 正常工作,但 rowStyleClass="missingPeriod" 不工作。

请指教。

更新语法

更新到 v1.0.1

<p-dataTable [hidden]="loading" [rowStyleClass]="customRowClass" [value]="timePeriods" scrollable="true" scrollHeight="400px">
    <p-column field="StartDate" header="Begindatum" sortable="false">
        <template let-col let-timePeriod="rowData" pTemplate type="body">
            <span [class.missingPeriod]="!timePeriod.IsNext">{{timePeriod.StartDate | date: 'dd-MM yyyy'}}</span>
        </template>
    </p-column>
    <p-column field="EndDate" header="Einddatum" sortable="false">
        <template let-col let-timePeriod="rowData" pTemplate type="body">
            <span>{{timePeriod.EndDate | date: 'dd-MM yyyy'}}</span>
        </template>
    </p-column>
</p-dataTable>

还有打字稿:

public customRowClass(rowData, rowIndex): string {
    console.log("In customRowClass");
    console.log(rowData);
    console.log(rowIndex);
    return "";
}

customRowClass 内的任何内容都没有记录。在我看来,这个方法没有被调用。

【问题讨论】:

  • 您在哪里找到 RowStyleClass?我在 priming 网站上的数据表属性列表中没有看到它。
  • 我使用 Google 找到了 RowStyleClass。它可能适用于旧版本的 PrimeNG。他们的示例链接不起作用,因此他们的网站不是很有帮助。
  • 您是否尝试使用styleClass 属性?

标签: angular angular2-template primeng


【解决方案1】:

rowStyleClass 的工作方式与您想象的有些不同;它接受一个函数作为输入,该函数返回一个字符串(CSS 类名)。它在PrimeNG DataTable docs 中列出。

在我的 HTML 中,我有:

<p-dataTable [rowStyleClass]="lookupRowStyleClass" ...>

在组件中:

lookupRowStyleClass(rowData: User) {
    return rowData.accountDisabled ? 'disabled-account-row' : '';
}

在全局 CSS 文件中:

/* TODO: this should really be in the component's CSS file, but it doesn't seem to apply to the PrimeNG data table properly there */
.disabled-account-row {
    /* TODO: first try this without '!important', but you might need it */
    color: silver !important;
}

如果这没有帮助,您需要升级到更新的版本。 PrimeNG 1.0.0 RC5 已于 2016 年 11 月发布。

【讨论】:

  • 我还看到了这个提交 github.com/primefaces/primeng/issues/1296 建议使用不同的语法。这个看起来更好,因为我的行需要根据行数据着色。不是像您的user 这样的全局对象。我刚刚使用npm update --save 进行更新,但仍然无法正常工作。
  • 我刚刚在我的主题开始中发布了我的最新代码,使用的是 GitHub 上的示例。
  • @PaulMeems 如果您还没有升级到更新版本的 PrimeNG,比如 1.0.0 RC5,请尝试升级。这种方法需要更新的版本。您的代码示例看起来不错。
  • 我已经更新到 v1.0.1 但没有运气。你有工作样本吗?
  • @PaulMeems 好吧,是的,这是 PrimeNG 的最新版本。我在这个答案中提到的代码是我一直在使用的,并且有效。我想知道是否可以在数据表类github.com/primefaces/primeng/blob/master/components/datatable/…中设置断点。
【解决方案2】:

看来scrollable="true" 是造成这种情况的原因。当scrollable 设置为true 时,将使用不具有getRowStyleClass 绑定的不同模板。

在这里您可以看到&lt;tr&gt; 对应于一个不可 可滚动的表格具有getRowStyleClass 的绑定:https://github.com/primefaces/primeng/blob/02e88b16e811a10d8842deb1f5e354bfb295d4c9/components/datatable/datatable.ts#L180

但是可滚动表格的&lt;tr&gt;没有绑定:https://github.com/primefaces/primeng/blob/02e88b16e811a10d8842deb1f5e354bfb295d4c9/components/datatable/datatable.ts#L257

您可以在this Plunkr 中看到这两种情况,我已经发布了一个问题here

我看不出该方法不能用于可滚动表的任何原因,因此我提交了一个带有修复此问题的 PR,您可以监控 here

【讨论】:

  • 感谢您发现问题。我已订阅您的问题,将等待解决方案。当您的问题解决后,我会将您的帖子标记为答案。
  • 看起来修复已合并到:github.com/primefaces/primeng/pull/1614。不确定新版本发布的速度有多快。
【解决方案3】:

在 PrimeNg 的 1.1.3 版本中,此问题已得到修复。所以这个问题可以结束了。

【讨论】:

  • 这仍然是一个合法的“操作方法”问题。无需关闭
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 2021-09-20
  • 2018-06-10
  • 1970-01-01
  • 2017-12-14
相关资源
最近更新 更多