angular ngClass评估

angular ngClass evaluation

我一直在学习 AngularJs 并构建了一个非常基础的 Angular 应用程序。在应用程序的一部分中,我在 div 元素处使用了 ngClass,例如

<div ng-class='{"some class": aFuncTruthyOrFalsy()}'>
<!-- aFuncTruthyOrFalsy() is defined in the controller for this view-->

现在,视图中有一个输入元素与上述元素无关,并且与上述函数中检查的任何值完全无关。

我注意到每当我在输入字段中键入内容(更改事件、按键事件)时,它都会导致重新评估 ngClass。 (我在 aFuncTruthyOrFalsy 函数中放入了一个控制台日志)。我无法确定哪些事件冒泡导致重新评估。

在我看来,ngClass 在页面中的每个事件中都会重新评估。

有人可以explain/elaborate这种行为吗?

是否可以在视图的初始加载时缓存评估的class?

如果在同一个视图中使用了多个 ngClass,并且每个表达式求值都委托给了某个函数,该函数再次执行多个操作来获取求值表达式怎么办?

当作用域中的某些内容发生更改时 AngularJS 通过调用 $digest() 自动触发 $digest 循环。当 $digest 循环开始时,它会触发每个观察者。

Angular 在作用域模型上设置一个观察者,它会在模型​​发生变化时更新视图。

因此,当您更改作用域中的某些内容时,所有观察者都会被解雇并且模型会重新评估。

这是一篇关于该主题的好文章:Link

Angular 绑定是使用 $watch 来监视函数值的变化。摘要循环正在调用您的函数以将结果与上一个值进行比较。

这篇文章很好地解释了这一点 http://tutorials.jenkov.com/angularjs/watch-digest-apply.html#watch

我建议绑定到作用域变量而不是函数。即在范围内有一个变量将存储该函数的结果,并且您可以在需要时更新它。

毕竟你不想从你的视图中调用方法 probably.Your 当前设置为使整个 MVC 概念无效而敞开大门,例如后来有人在该方法中添加了原本应该只是 getter 的功能。

你可以做类似

 <div ng-class="{'background1': color.back}">
    <label> <span>{{emp.comp}}</span> </label>
  </div>