Javascript 如何在多个控制器中使用相同的数据?

Javascript 如何在多个控制器中使用相同的数据?,javascript,angularjs,json,web-services,Javascript,Angularjs,Json,Web Services,重点是:我正在为web应用程序构建图表。我从java中的Web服务中的单个对象获取图表的信息。 下面是我正在检索的JSON对象的基本格式 { "chart1Info": [9, 42, 43, 7, 20], "chart2Info": [45, 3, 21, 34] (...and so on)} 在我的app.js(AngularJS代码所在的位置)上,我有7个控制器用于7个图表。在每个控制器中我调用服务以获取包含所有信息的相同对象 app.controller('chart1', fun

重点是:我正在为web应用程序构建图表。我从java中的Web服务中的单个对象获取图表的信息。 下面是我正在检索的JSON对象的基本格式

{ "chart1Info": [9, 42, 43, 7, 20], "chart2Info": [45, 3, 21, 34] (...and so on)}
在我的app.js(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...    
    });
});
我想做的是只调用服务一次并保存对象,这样我的控制器就可以使用它,因为每个对象都是同一个对象。 我尝试使用一个主控制器来解决所有其他控制器,并将$rootScope属性设置为JSON对象,如

$rootScope.chartData = response.data;
//Inside the $http.get() function
但它在其他控制器中未定义。
感谢您的回答

您需要在控制器中添加$rootScope依赖项,否则$rootScope将无法正常工作

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

您应该实现一个Factory服务,在该服务中,如果尚未检索到数据,则仅加载数据

在这里检查

然后,工厂可以作为依赖项在所需的控制器之间共享。

//使用localstorage

试试这个

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;

  });

尝试实现工厂服务,并选中“将该值放入变量”和“仅当该变量没有值时获取值”


否则,实现一个父控制器并在那里调用api并将其存储到一个变量中,并在所有子控制器中调用该数据。您可能要做的是创建一个加载数据的接口,然后在数据读取完成时使用与图表控制器通信,以便控制器可以查询服务以显示新数据


通过rootScope通信数据不是一种好的做法。

当全局控制器加载调用图表服务并将这些数据存储在$rootScope Variable中时,您可以使用它进行进一步的通信