模拟谷歌地图基于位置的url



在谷歌地图上,当你登陆主页后,你会看到一个默认位置(我想这取决于你的位置),url看起来像这样:

https://www.google.com/maps/preview

一旦你在地图上移动,url就会改变,添加/maps和一些带有LatLng和缩放的参数

https://www.google.com/maps/@38.3206568,-120.9094382,10z

如果你把这个链接给某人,它就会指向那个特定的位置。

我正在开发的网站在登录页上显示了一张地图,所以当你转到www.mymapsite.com时,你会看到一张带有默认位置的地图。然后,当您四处移动时,我想添加前面描述的相同行为(但没有/maps)。

https://www.mymapsite.com/@38.3206568,-120.9094382,10z

我在控制器中有这个功能,可以使用$location服务更新路径:

$scope.updateMapTrack = function() {
    $rootScope.trackOptions = $scope.trackOptions;
    $location.path('@' + $scope.trackOptions.centerLat + ',' + $scope.trackOptions.centerLng + ',' +$scope.trackOptions.zoomLevel + 'z');
};

问题是,这会通过$urlRouterProvider.otherwise('notfound')并将我踢出地图(显示我们的自定义404错误)。

我的问题是:;我还应该在$urlRouterProvider上修改什么来允许这种行为?,我应该使用不同的东西来更改url吗?

如果你能提供一种不同的方法来实现这一点,我也会感谢你。

最后我成功了:)(但从这个问题的访问量来看,我觉得我不会帮助很多人)

它做了很多更改,以防有人想在他们的网站上做类似的事情,这里有一个简短的版本:

  • 更新URL时,必须使用.replace()

    $location.path(newPath).replace();

  • 为了控制路由例程,必须添加$urlRouterProvider.deferIntercept();,就像这里描述的那样,这为一些边缘情况提供了处理。

  • 在第一次着陆时重定向到默认位置:

    $urlRouterProvider.when('/', defaultTrackingOption);//the same for other landing possibilities

  • 控制器的路由url匹配必须有一个正则表达式来匹配跟踪模式(我的是如此基本,我甚至不能在这里分享它)

最新更新