我有一个具有两个级别的巨大 JSON 对象树。第一级大约有 500 个元素,每个元素平均包含 100 个子元素。
我想显示树的第一级,我用一个简单的ng-repeat
. 当用户单击element
我想显示该元素的子元素时。如果我在页面首次呈现时使用 spanng-switch
或 a来显示/隐藏子元素,它会在生成所有 HTML 时冻结大约 10 秒。ng-show
这听起来不像是正确的解决方案。必须有不同的方法,但我无法弄清楚。有谁知道?
我有一个具有两个级别的巨大 JSON 对象树。第一级大约有 500 个元素,每个元素平均包含 100 个子元素。
我想显示树的第一级,我用一个简单的ng-repeat
. 当用户单击element
我想显示该元素的子元素时。如果我在页面首次呈现时使用 spanng-switch
或 a来显示/隐藏子元素,它会在生成所有 HTML 时冻结大约 10 秒。ng-show
这听起来不像是正确的解决方案。必须有不同的方法,但我无法弄清楚。有谁知道?
我在评论中解释得最多,这里是一个工作的 plunker: http ://plunker.co/edit/RSZwfLlsCJ68MUkACbdp?p=preview
新ng-if
指令会做你想做的事
<h1>ng-if</h1> <h5>Click on the level to expand</h5>
<div class="well">
<ul class="nav nav-list" ng-repeat="(attr,element) in tree">
<li ng-click="expand=!expand" ng-class="{'active':expand}"><a>{{element.name}}</a></li>
<ul ng-if="expand" class="nav nav-list">
<li ng-repeat="item in element.items">{{item.name}}</li>
</ul>
</ul>
</div>
您也可以ng-show
使用新的三元运算符或其替代方法以“旧方式”执行此操作expr && if_true || if_false
<h1>old-way</h1> <h5>Click on the level to expand</h5>
<small>use ternary operator or <pre>expand && element.items || []</pre></small>
<div class="well">
<ul class="nav nav-list" ng-repeat="(attr,element) in tree">
<li ng-click="expand=!expand" ng-class="{'active':expand}"><a>{{element.name}}</a></li>
<ul ng-show="expand" class="nav nav-list">
<li ng-repeat="item in (expand ? element.items : [])">{{item.name}}</li>
<!--<li ng-repeat="item in (expand && element.items || [])">{{item.name}}</li>-->
</ul>
</ul>
</div>
我建议逐步从服务器获取数据。使用服务器端分页并仅检索您要显示的字段。然后,当用户单击一个第一级项目时,您可以使用新数据对服务器执行另一个 XHR。我对一个项目有类似的要求,这解决了延迟问题。
问候,奥古斯丁。