1

我正在尝试突出显示基于行的用户输入。我正在使用带有 ag-grid-angular 19.1.2 的 Angular 5。使用 gridOptions.getRowStyle 设置样式会更改背景,但如果可能的话,我宁愿使用 scss 类。html文件中通过(change)=setHighlight()调用函数setHighlight ()

setHighlight() {
const nextChronoId = this.getNextChronoDateId();
// this.highlightWithStyle(nextChronoId); // Working solution
this.highlightWithClass(nextChronoId);
const row = this.gridApi.getDisplayedRowAtIndex(nextChronoId);
this.gridApi.redrawRows({ rowNodes: [row]})
}

函数定义:

  highlightWithStyle(id: number) {
  this.gridApi.gridCore.gridOptions.getRowStyle = function(params) {
  if (params.data.Id === id) {
    return { background: 'green' }
   }
  }
 }

highlightWithClass(id: number) {
this.gridApi.gridCore.gridOptions.getRowClass = function(params) {
  if (params.data.Id === id) {
    return 'highlighted'
  }
 }
}

我的 scss 课程:

/deep/ .ag-theme-balham .ag-row .ag-row-no-focus .ag-row-even .ag-row-level0 .ag-row-last, .highlighted{
 background-color: green;
}

我的问题 使用 getRowClass 没有将我突出显示的类正确应用于 rowNode。在阅读(并尝试)后我认为我的自定义 scss 类被 ag-classes 覆盖。使用rowClassRules时会出现同样的问题。

问题 如何让 Angular 5 和 ag-grid 一起正确设置我的自定义 scss 类?

使用调试器单步执行显示该类被拾取并附加到本机 ag-grid 类。

rowComp.js 中在此处输入图像描述

此外,来自开发工具的屏幕转储: 屏幕转储

4

1 回答 1

1

angularViewEncapsulation是这里的罪魁祸首。

首先要注意,所有像/deep/or一样的阴影穿透选择器::ng-deep都将被弃用。

据我所知,这留下了两种选择。

  • 采用ViewEncapsulation.None
  • 将您的highlighted类添加到全局样式表

设置ViewEncapsulation.None带来了它自己可能的问题:所有组件样式都将成为全局可用的样式。

我建议选择选项二。

这个答案总结得很好。

另外:
.ag-theme-balham .ag-row .ag-row-no-focus .ag-row-even .ag-row-level0 .ag-row-last
这个选择器永远不会匹配任何东西,你应该把它改成

.ag-theme-balham .ag-row.ag-row-no-focus.ag-row-even.ag-row-level0.ag-row-last

之后的每个类都ag-theme-balham存在于同一个元素上。
使用您编写的选择器,您将表示一个层次结构。

希望这可以帮助

于 2019-03-12T09:17:53.860 回答