我重复一个巨大的物体,正在快速研究铬和歌剧。但在像Mozilla和IE这样的浏览器上,它非常慢。我尝试使用分页,它有所帮助,但我想在加载时显示所有项目而不是分页。所以我提出了这个想法,如果可以在执行对象上的最后一项后停止ng-repeat听取对象。
但它不应该删除它呈现的html元素。
如果对象被更改,它应该再次重新运行ng-repeat并停在最后一个项目上。
根据我对ng-repeat的了解,它继续无限循环对象,这可能是IE和Mozilla在对象太大时加载它们的速度慢的原因。
这样可以停止ng-repeat吗?
答案 0 :(得分:0)
如果您的收藏根本没有变化,则ngRepeat不应该更改DOM。您应仔细剖析,以确保问题符合您的想法。
在文档(https://docs.angularjs.org/api/ng/directive/ngRepeat)中,
ngRepeat使用$ watchCollection来检测集合中的更改。当发生更改时,ngRepeat会对DOM进行相应的更改:
添加项目时,会将新模板实例添加到DOM中。
删除某个项目后,将从DOM中删除其模板实例。
当重新排序项目时,它们各自的模板将在DOM中重新排序。
无法阻止这种情况,$watchCollection
(我相信)必须遍历您的集合以查看是否有任何重新排序。
在使用ngRepeat时,看起来也不可能“关闭”手表。
如果您不想使用$watchCollection
作为检测更改的机制,则可能必须创建自己的脏检查/触发器,并自行生成DOM。