2017-06-29 13 views
0

現在、私のテスト・セットアップは、次のような次のとおりです。

app.run(function($rootScope, $http, $location) { 
url = $location.path() + '/raw'; 
$rootScope.test = 'hi'; 
$http.get(url).success(function(data) { 
    $rootScope.test = data.personality; 
    console.log($rootScope.test);//A 
});}) 

app.controller("Big5", function ($scope, $http, $location, $rootScope) { 
    console.log($rootScope.test);}//B 

Aが意図したとおりに動作します。//ではconsole.log - それはからJSONをログに記録しますurl。しかし、// Bのconsole.logは最初の$ rootscope.test変数である 'hi'を返します。これを修正する方法はありますか?

これが必要なページでは、コントローラを呼び出してグラフを描画する必要があります。

+0

:)ではなく$スコープサービスを使用することをお勧め$ HTTP – harishr

答えて

1

Bの値が「hi」として記録されているのは、コントローラ機能を実行した時点の値です。 HTTPサービスコールの結果を使用して値を設定するには、コントローラ関数内から呼び出す必要があります。すなわち

app.controller("Big5", function($rootScope, $http){ 
    $http.get(url).success(function(data) { 
     $rootScope.test = data.personality;   
    }) 
} 

は、より一般的には、ルートスコープを使用するように悪い習慣だ、私は

+0

のasync'自然 'についてお読みくださいはいああ - これは私が実装する方法でした最初の試みで。しかし、私は、このhttp呼び出しから受け取ったデータから複数のグラフを作成する多くのコントローラを持っています。したがって、すべてのコントローラにhttpコールを配置すると、本質的に同じデータを取得するために多くの呼び出しが行われます(後で解析されます)。私がこのデータを呼び出すAPIには1コールあたりのコストがあります。したがって、1回の中央コールが優先されます。 – skywang329

関連する問題