评估常量的角度表达式

时间:2015-03-12 22:47:15

标签: javascript angularjs performance angularjs-scope

如果我有$scope.FOO_CONST = 4,那么我可以这样做:

<div ng-show="bar.status == FOO_CONST">I'm in the FOO state</div>

但是,如果我正确理解,那就会创建一个观察器功能,每个摘要周期都会评估bar.statusFOO_CONST中的更改,即使我知道后者永远不会改变。 如果我有:

<div ng-show="bar.status == ::FOO_CONST">I'm in the FOO state</div>

是否删除了对FOO_CONST的冗余检查?如果是这样,那是否更高效? (我已经发现,随着大型角度应用程序的性能,我需要考虑的事情......)

或者,有没有更好的方法来实现角度表达式中常量的测试?

更新:事实证明== ::FOO_CONST在1.3.5中不是有效的语法。所以我将我的问题改为:

使用角度表达式针对常量计算变量的高效方法是什么? (即只关注测试一侧的变化)

1 个答案:

答案 0 :(得分:1)

手表实际上是在表达式上设置的,而不是单个变量。每个摘要,angular将评估表达式:

bar.status == FOO_CONST

并将其与之前的值进行比较。如果它已经改变,它将触发监视功能。

因此,只创建了一个$ watch,并且您正在以最高效的方式执行此操作。

编辑:

如果bar.status可以有几个可能的值,并且每个部分都有几个部分

"bar.status ==  SOME_CONSTANT"
然后ng-switch绝对有助于减少手表的数量。

<div ng-switch="bar.status">
    <div ng-switch-when="FOO_CONST">
    </div>
    <div ng-switch-when="FOO_CONST1">
    </div>
    <div ng-switch-when="FOO_CONST2">
    </div>
<div>
如果您使用当前推断的实现,

只有一个手表(在表达式“bar.status”上)与三个手表。