2016-07-13 12 views
0

おそらくそこには解決策がありますが、見つけられないか、すでに見つかっていないようです。 私は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"); 
} 

i)は(ボタン、」のgetValueをクリックすると、 "関数は自動的に再計算されますが、" getAnotherValue() "は再計算されません。このネストされた(またはさらにネストされた)状況であっても、データ変更によって何が影響を受けるかをすべて再計算する方法はありますか?

答えて

0

getAnotherValue()は更新されていませんか?私は自分でfiddleを設定して更新します。

実際、angleは、$ watch(式を追跡しているウォッチャー)を追加することで、データがUI(DOM)に正しくバインドされるようにします。

何かが変更されたときはいつでも、角度がすべてのウォッチャーを通過し、監視されているデータが変更されているかどうかを確認するダイジェストサイクルがあります(機能であれば再計算します)。

値が変更されたウォッチャの場合、angleは、ウォッチャーが報告している値に変化がないまで、チェックプロセスを再度繰り返します。

我々はステップでの処理を記述する場合:

1.startダイジェストサイクル

2.ask値の変更がある場合は一つウォッチャーの1

3.Ifはいずれかのウォッチャが変更を報告した場合、ステップ1に戻ります。

4.変更が報告されず、ダイジェストサイクルを完了し、UIを更新していない場合。

しかしダイジェストサイクル(デフォルトは10)の最大数に到達する角度原因となる、あまりにも複雑で、ネストされたウォッチャーまたは任意のウォッチャーループがあるという例外があるかもしれません。 Angularはダイジェスト処理を中断し、例外がこの状況下でスローされます。

+0

これは間違っていました(ng-repeatをng-repeatで使用して関数の値を変数に代入して壊しました)。返信いただきありがとうございます! – user3130985

関連する問題