2017-05-08 11 views
0

ここがポイントです。私はWebアプリケーションのチャートを作成しています。私は、JavaのWebサービスから単一のオブジェクトからチャートの情報を取得します。 は、ここで私は複数のコントローラで同じデータを使用するにはどうすればよいですか?

{ "chart1Info": [9, 42, 43, 7, 20], "chart2Info": [45, 3, 21, 34] (...and so on)} 

そして、私のapp.js上を取得していますJSONオブジェクトの形式は、基本的だ(私のAngularJSコードがどこにあるか)私は7つのチャートの7つのコントローラを持っています。 各コントローラーすべての情報で同じオブジェクトを取得するサービスを呼び出しています。私が何をしたいか

app.controller('chart1', function($scope, $http){ 
    $http.get('//WEBSERVICE_PATH').then(function(response) { 
     $scope.chartData = response.data; //The JSON object 
     //Then I build the charts...  
    }); 
}); 

はサービスのみ1時間を呼び出すと、それは一人一人のために、同じオブジェクトだから、私のコントローラが使用できるようにオブジェクトを保存しています。 は、私は他のすべてのコントローラをenvolvingメインコントローラを使用して

$rootScope.chartData = response.data; 
//Inside the $http.get() function 

のようなJSONオブジェクトに$ rootScopeのpropertieを設定しようとしたが、それは他のコントローラに定義されていません。 回答ありがとう

+0

グローバルコントローラがコールチャートサービスを呼び出して、そのデータを$ rootScope変数に格納する場合は、それをさらに使用することができます –

答えて

1

コントローラに$ rootScope依存関係を追加する必要があります。そうしないと、$ rootScopeは正しく動作しません。

0

まだ取得されていないデータがある場合は、データのみがロードされるファクトリサービスを実装する必要があります。

その後工場が依存関係として必要なコントローラ間で共有することができ、ここでhttps://docs.angularjs.org/guide/services

それを確認してください。

0

//ローカルストレージを使用

これを試してください。

app.controller('chart1', function($scope, $http){ 
    $http.get('//WEBSERVICE_PATH').then(function(response) { 
     localStorage.chartData = response.data; //The JSON object 
     $scope.chartData = localStorage.chartData; 
     //Then I build the charts...  
    }); 
}); 

次に、任意のコントローラを呼び出すことができます。このように

app.controller('chart2', function($scope){ 
     $scope.chartData = localStorage.chartData; 

    }); 
0

工場出荷時のサービスを実装し、その値を変数に置き、その変数に値がない場合にのみ値を取得するようにしてください。

そして、そうでない場合は、親コントローラを実装し、そこにAPIを呼び出し、それを変数に格納し、あなたはおそらく何をしたいすべての子コントローラ

0

内のデータがデータをロードする angular serviceを作成することであることを呼び出し、 angular event systemを使用して、データ読み取りのイベントがチャートコントローラに通信するようにして、コントローラが新しいデータを表示するようにサービスに問い合わせるようにします。

rootScope経由でのデータのやりとりは、あまり適していません。

関連する問題