みなさん、コウタロウです!!
今日はタイトルについて。
applyはdigestよりも遅い
AnuglarJsの双方向バインディングは便利ですよね!
ただ、変数($scope)をを変更しても画面表示が更新されない場合があります
今の案件でAngular-Ganttを使ってるんだけど、変数($scope)を変更しても画面表示が更新されない
Webで簡単にガントチャートが作成できるAngular Gantt – フリーランス チャレンジ!!
画面表示が更新されない場合、下記のいずれかで画面表示を更新させます
・$timeout
・$watch
・$digest
・$apply
基本的には、$timeoutを使えばいいんですが使えない場合は、その他の3つのいずれかを使うんだけど、$watchは多用するとパフォーマンスが悪くなる
そうなると、使うのは$digestか$applyになる
下記記事によると、$digestは$applyによって呼ばれるとのこと
AngularJSの$watch、$digest、$applyの概要 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで
3)$digestはどのようにして呼び出される?
$scope.$apply()によって呼び出されます。
となると、$digestの方が処理が軽いはず!
applyの方が速い場合もある
そう信じて、 $digestを使ったんだけどガントチャートの変数を変更して、画面表示まで2秒位かかる?!
さすがに遅いと思って$applyに変更したら秒殺で更新された!!
しかももうチョット調べると、$applyには引数を指定でき、そうすると指定した変数のみピンポイントで変更を検知し、画面表示を更新してくれる
こんな感じ
↓↓↓
$scope.$apply(変数);
例)$scope.$apply($scope.aaa.bbb);
2017/9/9更新
digestも引数指定すれば速い!!
例)$scope.$digest($scope.aaa.bbb);
むしろ、「$apply」よりも「$digest」の方が速かった!
っていうことで「$digest」を使って下さい!!
最後に
AngularJsで困るのは、変数を変更しても画面表示が更新されないことと、パフォーマンスですよね
もし、画面表示が更新されない場合は、「$apply(変数);」「$digest(変数);」をぜひ試してみて!!
コメント