可能有一个解决方案,但我似乎无法找到它,或者如果我发现它已经无法理解它。 我有一个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()”。有没有办法重新计算数据更改所影响的所有内容,即使在这种嵌套(甚至更嵌套)的情况下呢?
答案 0 :(得分:0)
您确定getAnotherValue()
没有更新吗?我自己设置了一个fiddle,它会更新。
事实上,angular会确保数据绑定到UI(DOM),以便通过添加$ watch(观察者跟踪表达式)来正确显示它们。
每当有变化的东西时,都会有一个消化周期,其中角度将通过所有观察者并检查观察的数据是否已经改变(通过重新计算它是否是一个函数)。
对于任何观察者,如果值已更改,角度将再次重复检查过程,直到所有观察者报告他们正在观看的值没有变化。
如果我们按步骤编写流程:
1.启动摘要周期
2.如果值有任何变化,请逐一观察观察者
3.如果任何观察者报告有变化,请返回步骤1
4.如果未报告任何更改,请完成摘要周期并更新UI。
然而,可能存在异常,即存在过于复杂和嵌套的观察者或任何观察者循环,这将导致角度达到最大摘要周期数(默认值为10)。 Angular会打破摘要过程,在这种情况下会抛出异常。