私はHTMLでこのコードを持っている:私のHTMLはどのくらいの頻度で関数を呼び出しますか?
<div >{{ getHint(us.q.hint) }}</div>
誰かが関数が呼び出されるとき私に言うことはできますか? us.q.hintが値を変更するとき、それは何度も呼び出されますか?
更新
私はいくつかの答えを持っており、それらは異なるです。値が変わるたびに関数呼び出しを行う方法はありますか?
私はHTMLでこのコードを持っている:私のHTMLはどのくらいの頻度で関数を呼び出しますか?
<div >{{ getHint(us.q.hint) }}</div>
誰かが関数が呼び出されるとき私に言うことはできますか? us.q.hintが値を変更するとき、それは何度も呼び出されますか?
更新
私はいくつかの答えを持っており、それらは異なるです。値が変わるたびに関数呼び出しを行う方法はありますか?
何度も。
インターポレーション({{ ... }}
構成体)は、ダイジェストサイクルの各反復の間に評価される。ダイジェストサイクルは、Angularで処理されるすべてのイベントで発生し、ダイジェストサイクルごとに複数の繰り返しが存在する可能性があります。
補間は、補間された式にウォッチャを作成します。ダイジェスト・サイクルはすべてのウォッチャーをループし、それぞれを評価してビューに適用する必要がある変更を検出します。ダイジェストコードは、各式を評価し、前の値と比較することで変化を検出します。これは、すべての監視された式がすべてのダイジェストサイクル中に少なくとも1回評価/実行されることを意味します。
あなたの場合、補間式はgetHint(us.q.hint)
です。その式が評価されると、$scope.getHint
関数が呼び出され、$scope.us.q.hint
という値で渡されます。 getHint
の戻り値は、以前の値と比較され、変更されたかどうかが判別されます。
これは、見ているのは$scope.us.q.hint
の値ではなく、式全体の値です。
,watchesおよびthe digest cycleについてさらに詳しくをご覧ください。更新のための
更新
あなたの関数は、引数の変更は、次の2回の変更でそれを行うことができた場合にのみ呼び出されますしたい場合:
getHint
に電話してください。getHint
呼び出しの結果を保持するスコープ変数を作成し、それをビューにバインドします。(すべてのウォッチャーが少なくとも一度呼び出され、$scope.hint
を初期化します):
$scope.$watch('us.q.hint', function() {
$scope.hint = $scope.getHint($scope.us.q.hint);
});
そして、あなたのビューで:
<div >{{ hint }}</div>
私はここで別の答えを得ています。値が変わるたびに値が変化するかどうか?値が変わったときにだけ関数を呼び出せるようにする方法はありますか? – Alan2
@Alan私は少し精緻化しました。うまくいけばそれはより明確です。 @JackA。 –
正しい。 Angular1では、すべてのダイジェストサイクルで変更検出が実行されます(彼が提供したリンクを見てください)。ダイジェストサイクルは、サイクルごとに最低2回実行されます。これは基本的に、Angularのコンテキスト内で非同期またはイベントベースのものすべてで実行されます。 ng-click、ng-model、$ http.getなどはすべてダイジェストサイクルを起動します。高価な操作の場合は、$ scope.myHintのような変数を作成して、us.q.hintが$ scopeを使って変更したときに設定してください。$ watch( 'us.q.hint'、function(newVal、oldVal){$ scope。 myHint = getHint(newVal)})、HTMLで{{myHint}}を使用してください。 –
watcher andを作成し、digest loopが実行されるのと同じくらい時間がかかるでしょう。 [batrang](https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfk?hl=ja)ツールをインストールし、ウォッチャーがどのように実行され、どのくらいの時間が費やされるかを調べて観察します。 –
@JenishRabadiya - それはウォッチャーを作成すると言います。その場合、ウォッチャーは監視せず、us.q.hintが値を変更したときにのみ関数を呼び出しますか? – Alan2
ちょうど好奇心から、 'getHint'は何か高価ですか? 'getHint'呼び出しが高価でない場合、このように残すことは悪くないかもしれません。 –