在谷歌地图上,当你登陆主页后,你会看到一个默认位置(我想这取决于你的位置),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匹配必须有一个正则表达式来匹配跟踪模式(我的是如此基本,我甚至不能在这里分享它)