2016-09-14 9 views
0

角度1.5.6を使用しています。私のアプリケーションはいくつかのモジュールで構成されています。各モジュールには独自のビューとコントローラがあります。私の質問は、それぞれのコントローラで$ rootScopeを見る方法です。 $ rootScope.accountにグローバル変数があるので、すべてのコントローラで$ rootScopeを監視する必要があります。ユーザーが$ rootScope.accountページを更新すると、すべてのアプリケーションがクラッシュします。私はすべてのモジュールで$ rootScope.accountを見たいので、ユーザーがリフレッシュしたら、リフレッシュを処理してログインページにリダイレクトすることができます。私は私のモジュールのすべてに私が注入するサービスの可能性があると思った?

+0

はい、工場を使用することができます。また、更新後に失われないように、ローカルストレージにユーザーアカウントを格納することもできます。 – MatthieuLemoine

+0

いくつかのGoogle Chromeの拡張機能を試してみてください。これは、かなりの手間を要する 'ng-inpector'のようなものです。ここにURLがあります - https://chrome.google.com/webstore/detail/ng-inspector-for-angularj/aadgmnobpdmgmigaicncghmmoeflnamj –

+0

[anglejsの可能な複製ルートスコープの変更](http://stackoverflow.com/questions/16888166)/angularjs-watching-rootscope-changes) – Bamieh

答えて

0

2つの簡単な方法で実行できます。

まず:あなたのコントローラに$rootScopeを含める:

app.controller('MyCtrl', [ 
    '$rootScope', 
    '$scope', 
    function($rootScope, $scope) { 
     $rootScope.$watch('myvar', function(newValue, oldValue) { 
      doSomething(); 
     } 

     //... 
    } 
]); 

セカンド。他のスコープに同じ名前の変数がない場合は、$rootScopeの使用を避けて、ちょうど$scopeを使用します。 $scopeはすべて$rootScopeから継承されているため、これが機能します。

app.controller('MyCtrl', [ 
    '$scope', 
    function($scope) { 
     $scope.$watch('myvar', function(newValue, oldValue) { 
      doSomething(); 
     } 

     //... 
    } 
]); 
+0

こんにちは、ありがとう。最初の解決策は私の考えを修正するだろうと思うが、このように私は関数を追加しなければならない($ rootScope、$ scope)...多くのコード複製を行うすべてのモジュールに、$ rootScope。$サービスを監視し、すべてのモジュールにこのサービスを追加するだけですか? – Mouss

+1

このコードを 'app.run(['$ rootScope'、function($ rootScope){...}])に入れてください。 – Stalinko

関連する問題