Angular Js:如何避免页面刷新时$ http调用的数据丢失?

时间:2014-05-08 13:40:43

标签: javascript angularjs google-maps google-maps-api-3 local-storage

前提:

我知道在StackOverflow上有类似的问题,如果我问这是因为解决方案在我的情况下不起作用(或者我无法正确应用它们)。

情况:

我有一个带有地图和一系列标记的Angular js应用程序,从数据库中检索数据和位置。该应用程序运行正常。我正在使用Angular-gm模块:https://github.com/dylanfprice/angular-gm而且我非常喜欢它。 当我点击导航链接时,我被重定向到带有地图的正确页面,我看到了地图上的所有标记。

问题在于,当我刷新页面时,我会松开所有标记,因为这些标记是通过$ http调用来检索的。

代码:

   // Initialising the markers array.
  $scope.markers= [];

  // Getting the list of markers through $http call.
  $http({
    url: 'main/json_get_markers',
    method: "POST",
   }).success(function (data) {
        $scope.markers = data;
     });

可能的解决方案:

在StackOverflow和google中搜索我找到了一些可能的解决方案:

  1. 使用 $ route.reload();

    如果是正确的解决方案,那么问题是: 我怎样才能完全应用$ route.reload();在这种情况下?因为我不明白我必须把它放在哪里。如果我把它放在控制器中它会产生一个无限循环,这意味着页面会持续刷新。那么必须准确推出哪个页面?

  2. 使用 ngStorage模块http://ngmodules.org/modules/ngStorag 我看到它在演示中工作正常,但我试图在我的情况下应用它并且无法获得任何结果。 因此,如果这是正确的解决方案,那么问题将是:如何重写$ http调用以将结果保存到$ localStorage?

2 个答案:

答案 0 :(得分:4)

好的,我认为如果您进行这些更改,它应该在它不会始终加载数据时修复剩余的问题。

myApp.factory('markersRepository', function($http){ 
    var markersRepository = {
       getAllMarkers: function(){
           var url = "main/json_get_markers";
           var promise = $http.get(url).then(function(response){
               return response.data;
           });
           return promise;
       }
    };
    return markersRepository;
});  

function MapController ($scope, markersRepository){
    markersRepository.getAllMarkers().then(function(markerData){
        $scope.markers= markerData
    });
});

我希望这有帮助---干杯!

答案 1 :(得分:1)

好的,按照@jaredReeves的建议,我已经提出了这个解决方案:

我已经宣布了一项服务:

myApp.factory('markersRepository', function($http) 
{
  return 
  {
    getAllMarkers: function() 
    {
        var url = "main/json_get_markers";
        return $http.get(url);
    }
  };
});

并将其注入Controller:

function MapController ($scope, markersRepository) 
{
  markersRepository.getAllMarkers().success(function(markers) {$scope.markers= markers});
}

它正在发挥作用。当我刷新页面时,标记仍在那里!

说实话,它有95%的时间都在工作,有时我刷新,没有标记。在这种情况下,我必须让一些秒钟再次刷新。然后会出现标记(但我不知道为什么......)

无论如何,我遇到的问题基本上已经解决了。 我不知道这是否是最佳解决方案。 如果您有更好的解决方案,我会将您的答案标记为正确。