2013-12-18 15 views
13

angularJsではグローバル変数を見ることができますか?AngularJsウォッチウィンドウ変数

私は、レガシーコードからwindow.test変数を設定しました。その変数が存在するかどうかを知るために、その変数を監視する必要があります。

私はやや

$window.$watch("test" , function(n,o){ 
    //some code here... 
} 

答えて

21

のようなものを試してみました。あなたは、可能ならば角度$window service(直接windowにアクセスするよりも、ドキュメントで説明したように、より安全である):

app.controller('myCtrl', function ($scope,$window) {...} 

をそして、そのようなあなたの$watchに最初のパラメータとしてウォッチ機能を使用します。

$scope.$watch(
    function() { 
     return $window.test 
    }, function(n,o){ 
     console.log("changed ",n); 
    } 
); 

demo fiddle

しかし、何かが$ダイジェストを行うことがアンギュラトリガするまで$watchが実行されないことに注意してください。 1つの可能な方法は、レガシーコードをにラップするか、レガシーコードがエクスプレッションになったら$digestをトリガーすることです。ここにいくつかの良いdocumentation on thisがあります。

基本的に、角度の外で変更が発生したとき(たとえば、jQueryが変更を引き起こすときによくある問題です)、何かが変更されたかどうかをAngularに伝えなければなりません。 Angularが妥当なパフォーマンスを維持する方法の1つです。

+1

レガシーコードのように角度の範囲外で変更された場合、これは機能しますか? – TheSharpieOne

+0

更新されました。 – KayakDave

+5

もう1つ注目すべきことは、$ window.testの値自体が変更された場合、プリミティブ型(数値、文字列、日付、ブール値など)の値が変更された場合、またはオブジェクト参照が変更された場合にのみ発生する点です。 $ window.testのプロパティが変更された場合にトリガしたい場合は、$ watch()の3番目のパラメータとして 'true'を渡す必要があります。これにより、angleは等価ではなくプロパティをチェックします。 –

関連する問題