javascript - 使用angularjs隐藏表列的最有效方法

标签 javascript angularjs performance angular-ng-if angularjs-digest

我想知道是否有人知道在由 angularjs 提供支持的表格中显示/隐藏列的更有效方法:

我有一个大表(20 多列,1000000 多行)并实现了一项功能以根据用户偏好显示/隐藏列。我在每个表格单元格上通过 ng-if 执行此操作。这会在表的初始加载时触发大量观察者计数,并且 Angular 摘要循环变得疯狂,单个页面上有超过 4000 个观察者。

我解决性能问题的主要想法是减少观察者数量。为此,我使用 this什么都不做的库然后禁用不在视口(viewport)中的观察者。到目前为止一直很好,性能变得更好了,但是如果我向表中添加越来越多的功能会怎样呢?看起来这个显示/隐藏列功能将永远成为我的性能瓶颈(根据 chrome angularJS 摘要计时分析,它是)。

结论:ng-if 看起来不是显示/隐藏列的好方法,因为观察者数量多且性能不佳。有人知道显示/隐藏列的更智能解决方案吗?

编辑:我已经有了每页 200 行的分页,但问题仍然存在,当然我的目标是可扩展的解决方案。

最佳答案

您可以尝试将 CSS 类应用于所有表格单元格和具有不同类名称的相应标题单元格。

EG:第 1 列、第 2 列等

在 Angular 字符串中定义类定义并将样式标记作为表达式放在中间

例如:

在 Controller 中 js

$scope.columnStyleDefs = '.column-1{display:none},.column-1{display:table-cell},...';

当用户更改他们的偏好时,您可以根据需要更改“columnStyleDefs”

在html模板中

<style>
{{columnStyleDefs}}
</style>

我认为这可能对您完成上述作业有所帮助。

关于javascript - 使用angularjs隐藏表列的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41679189/

相关文章:

C-排序大型2D整数数组的最快方法

javascript - jQuery 导航栏不起作用?

javascript - 在空函数中返回函数的结果是否有任何目的?

javascript - Backbone 建议在服务器端生成页面时插入所有模型

angularjs - deferred.resolve 给出错误 TypeError : undefined is not a function

php - AJAX 轮询频率 - 长轮询还是不长轮询?

javascript - 在 Firefox 开发工具中像检查普通对象一样检查异常对象

ruby-on-rails - 如何在这个 angularjs 设计库身份验证服务上存储和设置用户?还是已经完成了?

javascript - 类型错误 : Cannot read property 'notesObjectInService' of undefined

javascript - 浏览器性能不佳,无法隐藏大型(>1000 行,20 列)表