Json 在angularJS中存储https数据

Json 在angularJS中存储https数据,json,angularjs,rest,Json,Angularjs,Rest,我正在制作一个web应用程序,同时学习AngularJS,但在存储整个应用程序所需的数据时遇到了问题。在我的一个控制器中,我有一个POST调用,它返回一个JSON对象,其中包含我在应用程序的不同部分中需要的数据,我不知道如何存储整个JSON对象,以便以后可以访问它。如何存储JSON对象,以便稍后在其他控制器中访问它?我是否应该费心去做这件事,或者我应该稍后再发出一个POST请求来获取我当时需要的数据(发出POST/get请求是否很昂贵) 您当然不想继续对相同的数据发出POST请求(假设数据没有更

我正在制作一个web应用程序,同时学习AngularJS,但在存储整个应用程序所需的数据时遇到了问题。在我的一个控制器中,我有一个POST调用,它返回一个JSON对象,其中包含我在应用程序的不同部分中需要的数据,我不知道如何存储整个JSON对象,以便以后可以访问它。如何存储JSON对象,以便稍后在其他控制器中访问它?我是否应该费心去做这件事,或者我应该稍后再发出一个POST请求来获取我当时需要的数据(发出POST/get请求是否很昂贵)

您当然不想继续对相同的数据发出POST请求(假设数据没有更改)

您可以将其存储在$rootScope上,将$rootScope传递给需要访问数据的任何控制器,并通过以下方式进行访问:

 var whatever = $rootScope.yourObject;
例如:

  //Assuming a controller makes the POSt request (not in app.run etc)
 function yourController($rootScope, $http) {

       $http.post("desired/url", { params: "foo-bar"}).then(function(response){
            //Check for errorz etc.
            $rootScope.yourObject = response.data; //Assign to rootscope
       });

 }


 function someOtherController($rootScope){
      //Fetch the item from $rootScope, assuming the POST request was 
      // already made.
      var valueFromPreviousRequest = $rootScope.yourObject;
 }

最佳方法是使用自定义服务层进行数据获取,并避免控制器中的
$http
。在这种情况下,添加缓存机制非常容易

例如,简单服务:

app.factory('stats', function($q, $http) {

    // Hold cache in local variable
    var cache = null;        

    return {
        load: function() {
            return cache ? $q.when(cache) : $http.get(statsUrl).then(function(response) {
                cache = response.data;
                return data;
            });
        }
    };
});
然后,您可以在控制器中使用此服务:

app.controller('someController', function(stats) {
    stats.load().then(function(data) {
        console.log(data);
    });
});

请注意,服务
load
方法在两种情况下的返回方式:当缓存已可用时和当尚未加载数据时(第一次调用)。

$rootScope
不应用于此目的,简单的服务将是更好的答案
$http
还允许设置
缓存:true
同意,这是“邪恶全球”的东西。然而,我不会创建一个只用于存储数据的服务,同样,我也不会在$rootScope上设置一个函数-我认为有两种情况下,rootScope可以存储数据。因此,是的,9/10次我同意你的看法-我使用服务作为经验法则,尽管没有给出数据的上下文(它是否意味着可以在整个应用程序中使用?)我不会说rootScope不应该用于此目的。