前提:
我知道在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中搜索我找到了一些可能的解决方案:
使用 $ route.reload();
如果是正确的解决方案,那么问题是: 我怎样才能完全应用$ route.reload();在这种情况下?因为我不明白我必须把它放在哪里。如果我把它放在控制器中它会产生一个无限循环,这意味着页面会持续刷新。那么必须准确推出哪个页面?
使用 ngStorage模块:http://ngmodules.org/modules/ngStorag 我看到它在演示中工作正常,但我试图在我的情况下应用它并且无法获得任何结果。 因此,如果这是正确的解决方案,那么问题将是:如何重写$ http调用以将结果保存到$ localStorage?
答案 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%的时间都在工作,有时我刷新,没有标记。在这种情况下,我必须让一些秒钟再次刷新。然后会出现标记(但我不知道为什么......)
无论如何,我遇到的问题基本上已经解决了。 我不知道这是否是最佳解决方案。 如果您有更好的解决方案,我会将您的答案标记为正确。