我创建了一个用于在树结构中显示大量数据的指令。当一个元素被折叠时,它的内容会使用 ng-show 命令隐藏。
这是plunker的一个高度简化的版本。
该指令称为可折叠测试,并按如下方式使用:
<div collapsible-test>
<p>Here is some content....</p>
<div collapsible-test>
<p>Here is some more content....</p>
<div collapsible-test>
<p>Here is even more content....</p>
</div>
</div>
</div>
控制折叠的指令模板部分如下所示:
<div ng-show="!collapsed" class="panel-body">
<div ng-transclude></div>
</div>
这一切都很好,但是我需要使用 ng-repeat 将它用于数百个嵌套元素。这会导致页面加载需要 10-15 秒,然后在展开和折叠元素时也会有很大的延迟。
我试图通过用 ng-switch 替换 ng-show 指令来缓解这种情况。(我将在以后更新 angular 时使用 ng-if。)这种方法不起作用,因为对尚不存在的 DOM 元素使用 transclude 服务会产生错误。
<div ng-switch="collapsed">
<div ng-switch-when="false" class="panel-body">
<div ng-transclude></div>
</div>
</div>
我以为每次更改“折叠”状态时可能都必须重新编译,但我不明白如何使它工作。
或者,也许有更好的方法来解决我还没有想到的问题。
编辑:
OverZealous完美地回答了我的问题,谢谢!对于那些尝试做类似事情的人来说,这只是一个更新。此方法仅适用于 ng-repeat 循环之外。似乎 ng-if 在测试失败时会将 DOM 代码转换为注释。因此, ng-repeat 只会重复评论(或类似的东西)。所以 ng-if 和 ng-switch 仍然不是万无一失的,但是它们很好,你不需要 ng-repeat。