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

时间:2016-07-13 15:01:57

标签: javascript angularjs

可能有一个解决方案,但我似乎无法找到它,或者如果我发现它已经无法理解它。 我有一个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()”函数,但不会重新计算“getAnotherValue()”。有没有办法重新计算数据更改所影响的所有内容,即使在这种嵌套(甚至更嵌套)的情况下呢?

1 个答案:

答案 0 :(得分:0)

您确定getAnotherValue()没有更新吗?我自己设置了一个fiddle,它会更新。

事实上,angular会确保数据绑定到UI(DOM),以便通过添加$ watch(观察者跟踪表达式)来正确显示它们。

每当有变化的东西时,都会有一个消化周期,其中角度将通过所有观察者并检查观察的数据是否已经改变(通过重新计算它是否是一个函数)。

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

如果我们按步骤编写流程:

  

1.启动摘要周期

     

2.如果值有任何变化,请逐一观察观察者

     

3.如果任何观察者报告有变化,请返回步骤1

     

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

然而,可能存在异常,即存在过于复杂和嵌套的观察者或任何观察者循环,这将导致角度达到最大摘要周期数(默认值为10)。 Angular会打破摘要过程,在这种情况下会抛出异常。