2

我正在从 JSON 文件加载动态表,在 td 上我使用角度表达式根据一些应用程序逻辑评估 css 类名称 HTML 和 TS 代码如下所示

<td *ngFor='let colData of rowData.columns'
        id="{{colData.colIndex}}"
        (click)="selectColumn(colData.colIndex)"
        [ngClass]="getColumnClassName(colData.colIndex,rowData.rowIndex)"
        name="cell">
      {{colData.cell.value}}
    </td>
    
    
    
  getColumnClassName(selectedColIndex,selectedRowIndex):string {
    var colSelected = 'cell-default';  
    if (this.selectionSettings.columnsToSelect.filter(e => e.colIndex === selectedColIndex).length > 0) {
      if (selectedRowIndex >= this.selectionSettings.startIndex ) { 
        colSelected = 'cell-selected'
      }      
    }
    return colSelected;
  }
  

这工作正常。

有时 JSON 可能包含如此多的记录 [1000 行和 10 列] 所以这个 CSS 表达式将被计算 1000*10 次。此列表也有可能增加

这种分配 CSS 类的方法在性能方面是否是最佳的。我感觉 UI 在渲染有这么多记录的表格时会冻结我们如何确保浏览器没有过载,但正确分配 CSS 类?

4

2 回答 2

1

这是不好的做法,因为当您通过函数分配值时,该函数将在每次更改检测时触发。因此,如果您有 1000 个项目,则每个更改检测函数将被调用 1000 次。这就是 UI 将被冻结的原因。

我建议你实现自定义纯管道,因为如果输入数据不会改变,它只会被触发一次。

于 2021-07-09T12:57:47.393 回答
0

here we have to logic before Content render info view:

Example:

service.functionName().scubscribe(response => {
    this.rowData = response;
    this.rowData.columns = this.rowData.columns.map((val) => {
        val['selected'] = false
        if (this.selectionSettings.columnsToSelect.filter(e => e.colIndex === val.colIndex).length > 0) {
            if (this.rowData.rowIndex >= this.selectionSettings.startIndex) {
                val['selected'] = true
            }
        }

    })
})
  1. In component HTML acesss ng class by following
<td *ngFor='let colData of rowData.columns'
            id="{{colData.colIndex}}"
            (click)="selectColumn(colData.colIndex)"
            [ngClass]="{'cell-selected':colData.selected,'cell-default': !colData.selected}"
            name="cell">
          {{colData.cell.value}}
</td>

```
于 2021-07-09T12:39:10.747 回答