【问题标题】:AngularJs evaluate ng-show quite slowlyAngularJs 非常缓慢地评估 ng-show
【发布时间】:2015-12-04 12:53:49
【问题描述】:

情况:

在我的应用程序中,我有最多 12 个部分。 但并不是每次都必须显示,这取决于包含相关数据的对象是否为空。

在视图中,我检查每个对象,如果对象为空,则不显示相关部分。

就是这样。

问题在于,这会导致在主视图中显示按钮(链接到每个部分)时出现明显延迟。在 0.5 到 1 秒之间。 这实在是太多了。 如果没有 ng-show,按钮会立即显示,但我需要进行此项检查。

问题:

我可以做些什么来让 AngularJs 更快地评估?

我已经尝试了几种方法来进行检查,但延迟保持不变。

ATTEMPT 1 - 一般功能和 ng-show:

使用检查对象是否为空的通用函数:

$scope.isEmpty = function(obj) 
{
    // Return true if empty
    if (obj == null) return true;
    if (obj.length === 0)  return true;

    // Return false if not empty
    if (obj.length > 0)    return false;

    for (var key in obj) 
    {
        if (hasOwnProperty.call(obj, key)) return false;
    }

    return true;
}

观点:

<button class="button" ui-sref="app.section_1" ng-show="!isEmpty(section1_data)">Section 1 </button>


ATTEMPT 2 - 更简单的检查和 ng-show:

<button class="button" ui-sref="app.section_1" ng-show="section1_data.length > 0">Section 1 </button>


ATTEMPT 3 - 通用函数和 ng-if

<button class="button" ui-sref="app.section_1" ng-if="!isEmpty(section1_data)">Section 1 </button>


ATTEMPT 4 - 简单检查和 ng-if

<button class="button" ui-sref="app.section_1" ng-if="section1_data.length > 0">Section 1 </button>


结论:

对于所有这 4 次尝试,Angular 需要评估的时间是相同的。

我真的需要加快这个过程,但我已经没有想法了。 有人知道我该如何实现吗?

谢谢!

【问题讨论】:

  • 你能提供完整的例子吗?

标签: javascript angularjs performance ng-show angular-ng-if


【解决方案1】:

用 ng-if 替换 ng-show/ng-hide

【讨论】:

  • 为什么?唯一的区别是 ng-if 有一个孤立的范围。
  • 我已经尝试过了,你可以在尝试 3 和尝试 4 中看到 :)
  • @R.Salisbury,不仅如此,而且 - ng-if 如果条件 false 不向 DOM 添加元素,ng-show - 总是添加,只是改变样式
猜你喜欢
  • 2018-04-14
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多