Ng在同一集合上重复,通过应用程序多次使用
Ng-Repeat on Same Collection, used multiple times through an application
这个问题更多地与优化/性能有关。假设我有一组数据
scope.array = [1,2,3,5,...,1000];
我需要在这些元素上运行ng repeat,比如:
<div class="table" ng-repeat="a in array"> {{a}} </div>
事实上,我甚至不确定上面的内容是否准确,但这与问题的目的无关。现在让我们假设div在多个地方使用,也许像这样…
<div class="parent" ng-repeat="child in children">
<div class="table" ng-repeat="a in array"> </div>
</div>
div.table的每一次重复都会实例化1000个新的作用域元素,即使它在同一个数据集上重复。如果数据绑定在功能上是单向的,即用户实际上无法操作集合,那么什么模式可以阻止所有这些冗余的范围创建?
您无法避免创建子作用域,这是Angular工作方式的关键部分。尽管这里真正的问题是手表的总数,而不是范围的创建。范围的创造是一个小的一次性操作,然而手表的生活在一排。
例如,以一个包含1000行和10列的表为例。渲染整个表将导致创建10000个手表。任何浏览器都无法应付这么多手表,这将导致UI延迟问题。
但是,为什么要为用户不可见的元素创建行和监视呢?这个特殊的问题并不是一个新问题,解决方案是使用虚拟缓冲。现有的Angular指令如下https://github.com/EnzeyNet/VirtualScroll和https://github.com/kamilkp/angular-vs-repeat已经为你做了这件事。
基本思想是,如果您的数据集为100000,则一次只能在屏幕上看到N个数字,可能是10-40,因此只渲染视图中的行。
需要考虑的要点:
-
不要在控制器中使用$scope。使用controllerAs Controller/View语法。请参阅以下最佳实践资源。
-
如果您想要单向绑定(如果您的数据只设置了一次并且不更新,则需要单向绑定),请使用
::
语法。文档可在此处找到。关于解释/例子,你可以参考这个博客。
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- Ng在同一集合上重复,通过应用程序多次使用
- 在 Meteor React 应用程序中使用 Mongo 集合时,返回一个空数组 []
- 在猫鼬查询返回集合之前,应用程序应该如何处理 http get 响应
- 流星:通过 DDP 连接两个应用程序时,模板帮助程序中没有来自远程集合的文档
- 使用Backbone.js在待办事项中对数据集合进行分页.js Web应用程序
- 我应该使用嵌套集合来组织我的backbone.js应用程序吗
- 在Backbone/胸腔应用程序中实例化我的集合的位置
- BackboneJs:在应用程序的整个生命周期中使用部分获取而不是 1 个集合
- 简单的todos应用程序教程,试图创建一个函数,从Mongo集合中删除选中的任务
- 设计具有骨干模型和集合的应用程序