Javascript Angular Js:如何避免在页面刷新时丢失$http调用的数据?
前提: 我知道在StackOverflow上也有类似的问题,如果我问这个问题是因为解决方案在我的情况下不起作用(或者我不能正确地应用它们) 情况:Javascript Angular Js:如何避免在页面刷新时丢失$http调用的数据?,javascript,angularjs,google-maps,google-maps-api-3,local-storage,Javascript,Angularjs,Google Maps,Google Maps Api 3,Local Storage,前提: 我知道在StackOverflow上也有类似的问题,如果我问这个问题是因为解决方案在我的情况下不起作用(或者我不能正确地应用它们) 情况: // Initialising the markers array. $scope.markers= []; // Getting the list of markers through $http call. $http({ url: 'main/json_get_markers', method: "POST"
// 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;
});
我有一个带有地图和一系列标记的Angular js应用程序,从数据库中检索数据和位置。该应用程序运行良好。我使用的是角度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;
});
可能的解决方案:
// 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中搜索,我找到了一些可能的解决方案:
好的,根据@jaredReeves的建议,我提出了这个解决方案: 我已申报一项服务:
myApp.factory('markersRepository', function($http)
{
return
{
getAllMarkers: function()
{
var url = "main/json_get_markers";
return $http.get(url);
}
};
});
并将其注入控制器:
function MapController ($scope, markersRepository)
{
markersRepository.getAllMarkers().success(function(markers) {$scope.markers= markers});
}
它正在工作。当我刷新页面时,标记仍然存在
老实说,它在95%的时间里都在工作,有时我会刷新并且没有标记。在这种情况下,我必须等待几秒钟,然后再次刷新。然后会出现标记(但我不知道为什么…)
反正我的问题基本上解决了。
我不知道这是否是最好的解决方案。
如果您有更好的解决方案,我会将您的答案标记为正确。好的,我认为如果您进行这些更改,它应该可以解决剩余的问题,因为它不会始终加载数据
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
});
});
我希望这有帮助——干杯 您是否尝试过创建一个获取标记数据并将其注入控制器的服务?请记住,服务是单例的,应该能够维护检索到的数据。
$route.reload
在深度重新加载(例如f5
)的情况下不起作用localStorage
只能包含文本数据,因此您必须使用JSON.stringify
/JSON.parse
。感谢@JaredReeves提供的提示。我现在正试图做一些服务,但我无法使它工作。您能为这个特殊的案例做一个代码示例吗?谢谢@arturgrzesiak。你能用你的解决方案重写代码吗?我尝试过$scope.markers=JSON.stringify(数据);但是这不是正确的方法。这里有一个例子可以帮助您为您的特定案例开发服务。直到今晚晚些时候,我才有时间提供一个例子。在它不起作用的情况下,可能是因为数据在页面加载后返回,并且angular没有更新。您可以使用apply强制更新,或者更好地将服务转换为使用诸如read up on$q之类的承诺。这里非常感谢您的帮助!它的工作完美的100%的时间!我不知道承诺。只有一件事:在($http)之后的第一行中缺少一个{。我试图编辑,但无法提交编辑。再次感谢!很抱歉我进行了编辑({)。很高兴听到它对您有用。承诺和服务都非常有用。如果您是angular的新手,我建议您真正了解服务、指令和路由,因为它们是angular中最强大的功能之一。