在angularJS中存储https数据

时间:2015-04-05 18:37:04

标签: json angularjs rest

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

2 个答案:

答案 0 :(得分:1)

您当然不希望继续对相同数据发出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;
 }

答案 1 :(得分:0)

最佳方法是使用自定义服务层进行数据提取,并避免在控制器中使用$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);
    });
});

注意,service load方法在两种情况下都返回promise object:缓存何时可用以及尚未加载任何数据(第一次调用)。