我正在寻找Angular如何处理路线的简单解决方案。
我有服务器生成的页面,简单的谷歌地图和很少的逻辑,在3个独立的控制器中。
现在我想在其中挂钩路由。只是简单的路由。当我移动地图并获得新的协调时,我想将它们作为参数“?position = 10.11,50.23”推送到当前网址。我想使用hashbang备份的历史推送状态。
在应用程序的其他部分,我想听听这个参数的变化(可能会看一些$ watch?)。我想使用相同的代码来检测首次加载页面时要使用的更改。
我在之前的项目中使用了CanJS,这绝对是简单的,但在Angular中,我无法让宝宝步骤纠正结果:)
PS:这只是最小的用例。
由于
答案 0 :(得分:4)
你真的不需要角度路由来做到这一点。角度路由通常用于将ng-view
替换为不同的模板though it can be used for other things as well。
使用$location
服务并设置$watch
:
$scope.$watch(function () { return $location.search().position; }, function (newVal) {
$scope.params = newVal || 'No params';
});
$scope.setParams = function (val) {
$location.search('position', val);
};
在单独的窗口中启动实时预览,以查看窗口地址栏中的参数更改。
更新:该演示不再适用于plnkr.co。可能是因为他们改变了他们使用嵌入模式的方式。
答案 1 :(得分:2)
不知道CanJS,但是角度也很容易。
首次使用:$location.search({parameter1:'someValue', parameter2: 'someOtherValue'})
设置您的网址 - 历史记录将自动更新。
然后,检测url中任何更改的最优雅方法是使用(一个)两个内置事件:
$locationChangeStart
和$locationChangeSuccess
,就像那样:
$scope.$on("$locationChangeStart", function (event, next, current) {
// your staff goes here
});
$scope.$on("$locationChangeSuccess", function (event, next, current) {
// or here (or both if needed)
});
要获取搜索参数,只需在上述方法之一中使用$location.search()
即可。