在谷歌地图上,登陆主页后,您会看到一个默认位置(取决于您的位置),网址如下所示:
https://www.google.com/maps/preview
在地图上移动后,网址会发生变化,添加/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上修改以允许这种行为?我应该使用不同的东西来改变网址?
如果您提供不同的方法来实现这一点,我也将感谢您。
答案 0 :(得分:0)
最后我努力了:)(但是从这个问题的低访问量来看,我觉得我不会帮助很多人)
这需要进行很多更改,以防万一有人想在他们的网站上做类似的事情,这里只是需要的简短版本:
更新网址时,您必须使用.replace()
$location.path(newPath).replace();
要控制路由例程,必须添加$urlRouterProvider.deferIntercept();
,如描述here,这样可以处理某些边缘情况。
要重定向到第一个目标上的默认位置:
$urlRouterProvider.when('/', defaultTrackingOption);//the same for other landing possibilities
与控制器匹配的路由网址必须具有匹配跟踪模式的正则表达式(我的基本功能非常基本,我甚至无法在此处共享)