2016-03-28 3 views
0

私はHTMLでこのコードを持っている:私のHTMLはどのくらいの頻度で関数を呼び出しますか?

<div >{{ getHint(us.q.hint) }}</div> 

誰かが関数が呼び出されるとき私に言うことはできますか? us.q.hintが値を変更するとき、それは何度も呼び出されますか?

更新

私はいくつかの答えを持っており、それらは異なるです。値が変わるたびに関数呼び出しを行う方法はありますか?

+2

watcher andを作成し、digest loopが実行されるのと同じくらい時間がかかるでしょう。 [batrang](https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfk?hl=ja)ツールをインストールし、ウォッチャーがどのように実行され、どのくらいの時間が費やされるかを調べて観察します。 –

+0

@JenishRabadiya - それはウォッチャーを作成すると言います。その場合、ウォッチャーは監視せず、us.q.hintが値を変更したときにのみ関数を呼び出しますか? – Alan2

+0

ちょうど好奇心から、 'getHint'は何か高価ですか? 'getHint'呼び出しが高価でない場合、このように残すことは悪くないかもしれません。 –

答えて

3

何度も。

インターポレーション({{ ... }}構成体)は、ダイジェストサイクルの各反復の間に評価される。ダイジェストサイクルは、Angularで処理されるすべてのイベントで発生し、ダイジェストサイクルごとに複数の繰り返しが存在する可能性があります。

補間は、補間された式にウォッチャを作成します。ダイジェスト・サイクルはすべてのウォッチャーをループし、それぞれを評価してビューに適用する必要がある変更を検出します。ダイジェストコードは、各式を評価し、前の値と比較することで変化を検出します。これは、すべての監視された式がすべてのダイジェストサイクル中に少なくとも1回評価/実行されることを意味します。

あなたの場合、補間式はgetHint(us.q.hint)です。その式が評価されると、$scope.getHint関数が呼び出され、$scope.us.q.hintという値で渡されます。 getHintの戻り値は、以前の値と比較され、変更されたかどうかが判別されます。

これは、見ているのは$scope.us.q.hintの値ではなく、式全体の値です。

,watchesおよびthe digest cycleについてさらに詳しくをご覧ください。更新のための

更新

あなたの関数は、引数の変更は、次の2回の変更でそれを行うことができた場合にのみ呼び出されますしたい場合:

  1. が変更される値に時計を作成します。ウォッチャーでgetHintに電話してください。
  2. getHint呼び出しの結果を保持するスコープ変数を作成し、それをビューにバインドします。
  3. あなたのコントローラでそう

(すべてのウォッチャーが少なくとも一度呼び出され、$scope.hintを初期化します):

$scope.$watch('us.q.hint', function() { 
    $scope.hint = $scope.getHint($scope.us.q.hint); 
}); 

そして、あなたのビューで:

<div >{{ hint }}</div> 
+0

私はここで別の答えを得ています。値が変わるたびに値が変化するかどうか?値が変わったときにだけ関数を呼び出せるようにする方法はありますか? – Alan2

+0

@Alan私は少し精緻化しました。うまくいけばそれはより明確です。 @JackA。 –

+1

正しい。 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}}を使用してください。 –

0

これは以上に呼び出されますあなたのhtmlレンダリングやページがリフレッシュされるたびに1回は値の変更に依存しません。

us.q.hint 
+0

私はここで別の答えを得ています。値が変わるたびに値が変化するかどうか? – Alan2

+0

それはwheor値の変更に依存しないかどうかはusecqqintが値を変更した場合、それが呼び出されるとそれがニカサリーではないと呼ばれるでしょう –

+0

私は最後のコメントであなたの英語を理解できません。 – Alan2

-1

yes us.q.hintの値が変更されるたびに、それは監視されている間に実行されます。

+0

私はここで別の答えを得ています。値が変わるたびに値が変化するかどうか? – Alan2

関連する問題