akveo / ng2-smart-table

Angular Smart Data Table component
https://akveo.github.io/ng2-smart-table/
MIT License
1.63k stars 879 forks source link

Allow providing static row classes #1326

Open nikita-fuchs opened 2 years ago

nikita-fuchs commented 2 years ago

Currently, the only way to provide a class to rows seems to be via a function:

 this.settings = {
      rowClassFunction: (row) => {console.log('And again', row); return 'address-column-entry'; },
...

this was introduced in this PR: https://github.com/akveo/ng2-smart-table/pull/355

The issue with this pattern is that angular re-executes all functions bound to a template ( see className input here ) during change detection. Depending on how many rows the table has, this leads to unnecessary / heavy performance issues, as the classes are recalculated and applied to the DOM continuously. This is explained here very well: https://lukeliutingchun.medium.com/angular-performance-issue-caused-by-function-calls-in-template-a1a930f40464

With my example code, you can see the function being re-executed endlessly in the console.

It would be nice to have a way to statically set classes to rows, thanks !