AngularJS在数据更改时重新计算“嵌套”函数

AngularJS recalculate "nested" functions on data change

本文关键字:计算 嵌套 函数 新计算 数据 AngularJS      更新时间:2023-09-26
可能有

解决方案,但我似乎找不到它,或者如果我已经找到了它,我无法理解它。我有一个AngularJS应用程序,有以下设置:

在视图中:

<button ng-click="data=data+1"></button>
<div>{{getValue("something")}}</div>
<div>{{getAnotherValue("anotherThing")}}</div>

在控制器中:

$scope.getValue=function(param){
    return param+$scope.otherValues+$scope.data;
}
$scope.getAnotherValue=function(param){
    return param+$scope.evenOtherValues+$scope.getValue("someOtherParam");
}

当我单击该按钮时,"getValue()"函数会自动重新计算,但"getOtherValue()"不会重新计算。有没有办法重新计算数据更改影响的所有内容,即使在这种嵌套(甚至更多嵌套)的情况下?

你确定getAnotherValue()没有更新吗?我自己设置了一个小提琴,它确实更新了。

事实上,angular 将通过向它们添加 $watch(观察者跟踪表达式)来确保绑定到 UI(DOM) 的数据正确呈现。

每当有变化时,就会有一个摘要周期,在这个周期中,angular将遍历所有观察者并检查所监视的数据是否发生了变化(如果它是一个函数,则通过重新计算它)。

对于任何观察者,如果值已更改,angular 将再次重复检查过程,直到所有观察者报告他们正在监视的值没有变化。

如果我们分步骤编写过程:

1.启动摘要周期

2.逐个询问观察者是否有任何价值变化

3.如果任何观察程序报告有更改,请返回步骤 1

4.如果未报告更改,请完成摘要周期并更新 UI。

但是,可能存在例外,即存在过于复杂和嵌套的观察程序或任何观察程序循环,这将导致角度达到最大摘要周期数(默认值为 10)。Angular 将中断摘要过程,在这种情况下将引发异常。