【发布时间】:2015-05-11 15:19:06
【问题描述】:
我遇到了 Angular (Ionic) 的性能问题,我想知道解决这个问题的最佳方法。
我从必须在我的应用程序中显示的服务中获取对象列表:
$scope.objectList = [
{
id: 123456,
name: "abcdefg",
state: [1|2|3|4|5|6|7|8...],
....
},
....
];
列表中的对象永远不会超过 20-25 个。
问题是列表中的元素,虽然它们属于同一类型,但它们必须以完全不同的方式显示。对于对象可能处于的每种可能状态,我都有一个不同的模板。
我正在使用 ng-repeat 这种方式来显示列表。列表不会改变,所以我可以使用单向绑定。
<div ng-repeat="obj in ::objectList track by obj.id">
....
</div>
在这个 ng-repeat 中,我必须包含每个对象的演示模板,该模板会根据对象状态而变化。
我尝试了不同的解决方案,但没有找到能够显着提高渲染性能的解决方案。
例如,我已经尝试过了,但我不确定将函数绑定到 ng-include 是否非常高效。
HTML:
<div ng-repeat="obj in ::objects track by obj.id">
<div ng-include="getTemplateToInclude(obj)"></div>
</div>
JS:
$scope.getTemplateToInclude = function(obj){
if(obj.state === 1){
return "tmpls/template-a.html";
}else if(obj.state === 2){
return "tmpls/template-b.html";
}
....
};
关于如何处理这个问题的任何建议?将这些不同的模板包含在同一个列表中的最佳方式是什么?
我必须在包含的模板中使用单向绑定表示法(::) 还是使用 ng-repeat 中使用的一种就足够了?
提前致谢
【问题讨论】:
-
您如何实际测试性能?每个项目的这些 item 渲染器 有多大?我们是在谈论几个嵌套的 div 吗?绑定方式很少,或者它们是相当复杂的 DOM 结构 w。嵌套指令和表单之类的?
-
嵌套的 div 是每个对象的详细视图,其中包含一个图像和一些(5 到 8 个)字段(标题、描述、日期...)以及几个按钮。 DOM 并不像我想的那么简单,标题绝对定位在带有背景渐变的图像上。
标签: javascript angularjs ionic ng-repeat angularjs-ng-include