取り扱いから:https://www.cnblogs.com/yky-iris/p/9251230.html?utm_source=debugrun&utm_medium=referral
ビューは、問題とその理由を更新しません。 下のjsのネイティブまたはサードパーティ製のフレームワークを、モデルを変更、そのようなのsetTimeout、jQueryのプラグインとしてビューの更新を、トリガしないことが可能です。彼らは、コンテキストAngularjsで出ているので、Angularjsが変更されたデータに耳を傾けません。
解決策:次のように、ビューを手動で更新するには$()を使用して適用します。
HTML:
<P> {{名前}} </ P>
JS:
$ scope.name = "ジョン・ドウ" ; のsetTimeout(関数(){ $ scope.name = 'ジョン・ドウ' ; // $ $範囲は(適用)。 }、500)
A.は、()を適用します$ ダイジェストコンセプト
役割$適用()関数は: 角度コンテキストの実装の枠組み内外角度からの発現を可能にします。
$()関数の作品適用されます。フリップフロップと同等のものを、その役割は、トリガーにすることによりビューを更新し、サイクルをダイジェストです。
それは何をダイジェスト?:ダイジェストはAngularjsが、それはデータバインディングの魔法を実現していることであるコアです。任意のトリガイベントは、実際にダイジェストサイクルをトリガし、このようなイベントは、クリック、変更をNGと、サイクルを消化トリガーされます。
II。より良い利用ダイジェスト
Angularjsでは、$適用に加えて、サイクルを消化トリガすることができ、他の方法があり、また、このサイクルをトリガすることができます。そして、$最悪の選択肢になりがち適用されます。以下は、いくつかのより良い選択をお勧めします。
(1)。$ダイジェスト
$範囲。$ダイジェスト()の速度、それが唯一のスコープとサブスコープの現在値を更新するため、関係なく、親のためのスコープの$よりも、高速に動作するように適用されます。そして、$パフォーマンスに大きなドレインである親スコープを、評価にも適用されます。
(2)。$タイムアウト
それは、よりフィット感Angularjs環境があるときに、あなたのsetTimeoutを交換する$タイムアウトでは、サービスのAngularjsとして$タイムアウトは、当然のことながら、来ます。それは劣性サイクルを消化トリガしません、それが実行を遅らせるだろうサイクルがサイクルダイジェストトリガーに完了した後、ダイジェストは、次の瞬間になりますので、何も上記が言及されています
$すでにダイジェストに進展
我々は$タイムアウトにコードをSETTIME
$タイムアウト(関数(){ $ scope.name = '李四' ; }、 500)
これが正常に動作することができ、外観、厄介を適用しないでください!
(3)。$ evalAsync
場合は、この方法が最も推奨されるべきです。あなたが実行中の現在のサイクルのダイジェストを持ってしまった場合、それはダイジェストの動作サイクルの原因となります、実行するために、現在のサイクルの中に消化します。現在は、彼らが消化できる前に、別のサイクルを実行し、実行サイクルを消化するまで待つ$タイムアウト。だから、evalAsyncは、より速く、より良いパフォーマンスを行います。私たちは、ある$タイムアウトにそのようにそれを呼び出すことができます
。$スコープ$ evalAsync( 関数($範囲){ にconsole.log( "$ evalAsync" ); } );