2013-08-21 13 views
13

現在、$ rootScopeに新しいプロパティを作成し、その値を1つのモジュールに設定しています。

$rootScope.test = 123; 

この値は後でサービス機能で参照しようとしています。私はChromeでコンソール出力を表示すると

.factory("testFactory", function ($location, $http, $rootScope) { 
    /* .... */ 
    return { 
     testFunction : function(){ 
      console.log($rootScope); 
      console.log($rootScope.test); 
     }, 
     /* .... */ 

、私はテストの値が$ rootScopeオブジェクトに正しく設定されていることを見ることができますが、私は$ rootScope.test構文を使用して参照することができません。 $ rooScope.testは単にundefinedを返します。

サービスで$ rootScopeのプロパティ値を参照できないような理由はありますか?または、この値を不適切に取得しようとしていますか?


UPDATE - 私はに実行しています問題を実証Plunkerを作成しました。 http://plnkr.co/edit/ePEiYh

+0

どのように '.factory( "testFactory"、[ "$場所"、 "$ HTTP"、$を試みるについて – tymeJV

+1

'$ rootScope.test = 123;'を実行していることを確認してから、 'testFactory.testFunction();'を実行する前に '$ rootScope'を実行していることを確認してください。 – AlwaysALearner

+0

どうやって解決しましたか?全く同じ問題を抱えています。コンソールでは最初のconsole.logに属性が表示されますが、2番目に属性自体を印刷しようとすると定義されません。 –

答えて

9

これはうまく動作するはずです:

var myApp = angular.module("myApp", []); 

myApp.run(['$rootScope', function($rootScope){ 
    $rootScope.test = 123; 
}]); 

myApp.controller('AppController', ['$rootScope', function ($rootScope) { 
    console.log($rootScope.test); 
}]); 

Plunker: http://plnkr.co/edit/7NTGOK

を私はあなたがにそれを書いている前に、あなたは値を読んでいることと思います。より多くのコードを共有できますか?

UPDATE

デバッグの経験がここで本当に奇妙です。しかし、私の更新plunkerにあなたは書き込みが読んだ後に起こることのタイムスタンプを透かして見ることができます。

http://plnkr.co/edit/pn5Wxk

+0

残念ながら私は写真を投稿できませんでしたが、私のChromeのコンソールでは、まずconsole.log($ rootScope)を印刷してオブジェクトを展開すると "test:123"が定義されています。その行の後、私はconsole.log($ rootscope.test)を表示し、それは未定義として表示されます。 $ rootScopeでログの値を見ることはできますが、$ rootScope.testでは表示できませんでしたか? – ral8

+1

確かに奇妙に聞こえるが、いつも理由がある:)小さなテストケースを綱引きにまとめることはできますか?または、あなたのアプリをオンラインのどこかにアクセスできますか? – Christoph

+0

私は元の質問を編集して、プランナーリンクを追加しました。 – ral8

関連する問題