AngularJS:暂停$ digest&隐藏DOM元素的观察者

时间:2015-04-22 15:14:46

标签: angularjs optimization

我们正在构建一个单页应用程序,其中有多个页面作为选项卡加载。只有一个选项卡的内容在任何给定时间都可见(很像浏览器),因此我们希望暂时暂停$digest和观察者在隐藏选项卡的DOM节点上执行,直到用户切换到该选项卡

有没有办法实现这一点,以便继续为背景标签更新模型,但视图会根据条件进行更新。

以下代码说明了问题:

<div ng-repeat="tab in tabs" ng-show="tab.id == current_tab.id">
    <!-- tab content with bindings -->
</div>

目标是优化。

我已经知道Scalyr directives,但我想要一个更具体的解决方案,而不包含Scalyr中包含的额外功能。

2 个答案:

答案 0 :(得分:7)

经过一些反复试验后,我发现以下指令会暂停所有孩子的$$watchers,如果属性上的表达式评估为true,则{{1它会恢复所有备份的false

$$watchers

答案 1 :(得分:1)

好的,我要你展示一些代码的原因是因为@Rouby说的原因。

出于效果目的,您可以使用ng-if代替ng-showng-if从DOM中删除或恢复元素。

<div ng-repeat="tab in tabs" ng-if="tab.id == current_tab.id">
    <!-- tab content with bindings -->
</div>
当您想要以不同方式设置隐藏样式时,

ng-show很好用。例如,您可能希望隐藏元素只隐藏其“正文”,标题仍然显示。使用ng-show是可能的,您只需要为类ng-hide定义CSS样式。

如果要保留$ scope的值,可以将这些值与父作用域绑定,以保持变量的完整性。