javascript - ngRepeat 的速度问题。是否可以在 AngularJS 中重用 DOM 部分?

标签 javascript angularjs dom

我正在显示一个包含大量数据的列表,它变得非常慢非常快(>5 个条目 = 太慢)。我稍微修改了一下,发现问题不是数据量而是生成的许多 DOM 元素。

我展示了一个只有一些元信息的表格。对于每个表格行,还有两个隐藏的表格行,其中包括所有详细数据和一个编辑表单。点击一行打开详细信息,点击一些编辑按钮切换到编辑行。
没有编辑部分的简化 plunkr 可用 here .

问题在于,对于每个条目,都会生成三行,其中包含大量标签和数据。分页不是解决方案,因为只有 4 或 5 个条目时问题已经以显着的方式表现出来。我可以动态加载详细数据,但我发现瓶颈是 ng-repeat 必须创建的许多标签。 (我在这里弄错了吗?)
当我删除细节并编辑部分时,即使有 10 多个条目,页面加载速度也相当快。

一个解决方案可能是编写一次详细信息和编辑部分并将其隐藏,然后将其动态移动到相应的条目。我知道直接 DOM 操作在 Angular 中是不受欢迎的。有更好的解决方案吗? A plunkr that illustrates the idea

最佳答案

我查看了 angular.element 并用解决方案更新了第二个 plunkr。我仍然不确定是否有更优雅的解决方案。我将实现它并查看它是否解决了性能问题。

移动 DOM 部分:

<td id="detailPiece">
  Reuse this piece of DOM? Can it be done?<br />
  Tons of detail information, with edit capability etc.<br />
  {{detailItem.detail}}
</td>

是通过

实现的
angular.element('#detail'+index).append( angular.element('#detailPiece') ); 

对于我来说,空表行和所有内容看起来仍然像是一个“hacky”解决方案。

关于javascript - ngRepeat 的速度问题。是否可以在 AngularJS 中重用 DOM 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294068/

相关文章:

javascript - 按字母顺序对列表进行排序,字符在末尾

javascript - Angular 初始化时用户身份验证的最佳实践/模式?

jQuery:如果所选元素 $(this) 的父元素的类名为 'last'

javascript - 如何在 DOM 上触发 js 创建的触摸事件

javascript - 修复了父 div 中 div 的效果,但随着页面滚动,位置停留在屏幕上

javascript - 使用 Axios 取消缩短 url?

javascript - 了解 javascript promise ;堆栈和链接

javascript - 为什么我无法访问状态中的嵌套数据

javascript - 将 Cloudant API 与 IBMCloudCode 结合使用

jquery - AngularJS 再次加载初始内容后,无法在 DOM 上使用 JQuery