必要な場所ならどこにでも注入できる特別なサービスを構築するか、単にそれを配置することができます$rootScope
。$rootScope
通常、グローバルな状態はコードのにおいがすることが多いため、物事を に置くことは避けるべきです。ただし、それが本当に必要な場合は、これがニーズに合っている可能性があります。
そのコードをrun
ブロックに配置するだけで、モジュールがロードされるとすぐに実行されます。
myModule.run(['$rootScope', function($rootScope){
setInterval(function(){
$rootScope.now = new Date().getTime();
}, 1000)
}]}
上記のコードを書いた方法では、Angular はその変更について通知されないことに注意してください。ただし、その変更について Angular に毎秒通知することは、重大なパフォーマンスの問題につながる可能性があるため、望ましくない場合があります。明確にするために、変更についてAngularに通知してすべてのバインディングを更新したい場合は、変数の更新を$apply
呼び出しでラップする必要があります。
myModule.run(['$rootScope', function($rootScope){
setInterval(function(){
$rootScope.$apply(function(){
$rootScope.now = new Date().getTime();
});
}, 1000)
}]}
setInterval
また、処理間の時間は非決定論的である可能性があるため、ほとんどの場合は避けたいことに注意してください。ほとんどの場合、setTimeout
より適しています。それを掘り下げるのはこの回答の範囲外ですが、そのトピックについて読みたい場合は、このトピックに関する John Resig の投稿を読むことをお勧めします: http://ejohn.org/blog/how-javascript-timers-work/