angular1中ng-repeat效率优化方法:
2024-08-20 21:01:21
1.当 ng-repeat 的数组被替换时, 它默认并不会重新利用已有的 Dom 元素,而是直接将其全部删除并重新生成新的数组 Dom 元素:
2.Dom 的频繁操作是非常不友好的, ng-repeat为什么不能利用已有的 dom 元素去更新数据呢?因为你没有把数组元素的标识属性告诉它,那么两次替换的时候它就没办法追踪了;
3.ng-repeat会为每一个元素加上一个hashkey $$hashKey来识别每一个元素,当我们从后端重新获取数据时,即使数据完全一样,但是由于hashKey不一样,
angular会删除之前的所有dom,重新生成新的dom,这样效率就会大大降低。可以理解为ng-repeat默认是 track by $$hashKey的。
所以,我们应该使用一些不会变的东西来作为标识,比如后端数据的id.
4.列如:
<li class="gwclist" ng-repeat = "gwc in data | orderBy:'-sqtime' track by gwc.ID" ng-click = "gwcdetail(gwc)">
<h5>申请人:{{gwc.sqname}}<span class="pull-right color-dimgray">{{gwc.sqtime}}</span></h5>
<span>用餐时间:{{gwc.mettime}}</span>
<p ng-class="{0:'color-lightyellow',1:'color-red',2:'color-blue',3:'color-dimgray'}[{{gwc.processState | showstyle}}]">流程状态:{{gwc.processState}}</p>
<div class="button-bar" ng-if = "gwc.processState == '未提交'">
<a class="button button-small button-positive" ng-click="submit(gwc.ID)">提交</a>
<a class="button button-small button-stable" ng-click="delete(gwc.ID)">删除</a>
</div>
</li>
优点:这样当重新获取数据时,由于ID没有变,angular就不会去删除原来的dom,只会更新其中的内容,不同的ID再添加新的dom。效率就能提升了;
5.注意:
track by要放在orderBy之后,否则会影响orderBy的效果;
当单一数组有重复元素时,需要使用track by $index来保证两个元素都会渲染,否则只会渲染一个;
最新文章
- javascript DOM操作
- mysql, count函数容易曲解的地方
- 解决winrar压缩软件弹出广告
- javascript数组浅谈2
- BZOJ 4690 Never Wait for Weights
- 最小化安装Centos7后的部署(个人)
- 【Unity3D】iOS 推送实现
- Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到
- java格式处理工具类
- 小胖学PHP总结1-----PHP的数据类型
- protobuf 参考资料
- MVC常见的控制器,接口,数据层之间的操作
- Robomongo连接MongoDB 报 Authorization failed 解决办法
- 测试框架httpclent 4.HttpClient Post方法实现
- redis 高可用
- bzoj 2832
- JS设计模式(2)策略模式
- NOI 2017 整数(线段树)
- POJ2455 Secret Milking Machine
- How to export a model from SolidWorks to Google SketchUp
热门文章
- 使用junit和eclemma进行简单的代码测试
- Android : 高通平台Camera调试之SetpropKey/camxoverridesettings.txt
- LeetCode 160 相交链表
- 1—ARM中的寄存器
- vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
- No mapping found for HTTP request with URI [/crmcrmcrm/css/bootstrap.min.css] in DispatcherServlet with name &#39;springMvc&#39;
- JSP是一种语言
- python学习第一次笔记
- 设置Ubuntu右侧显示扩展屏幕。。。
- servlet之ServletRequest与ServletResponse (三)