4

我正在寻找 Angular 如何处理路线的简单解决方案。

我有由服务器生成的页面,带有简单的谷歌地图和小逻辑,位于 3 个独立的控制器中。

现在我想在其中挂钩路由。只是简单的路由。当我使用地图移动并获得新的坐标时,我想将它们作为参数“?position = 10.11,50.23”推送到当前网址中。我想将历史推送状态与 hashbang 备份一起使用。

在应用程序的其他部分,我想听听这个参数的变化(可能是一些 $watch?)。我想使用相同的代码来检测首先加载页面时要使用的更改。

我在之前的项目中使用了 CanJS,这绝对是简单的,但是在 Angular 中我不能让小步来纠正结果:)

PS:这只是最小用例的一部分。

谢谢

4

2 回答 2

4

你真的不需要角度路由来做到这一点。角度路由通常用于替换ng-view不同的模板,尽管它也可以用于其他事情

您可以通过使用该$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。可能是因为他们改变了使用嵌入式模式的方式。

于 2013-11-27T22:46:13.903 回答
2

不知道 CanJS,但在角度上它也很容易。

第一次使用:$location.search({parameter1:'someValue', parameter2: 'someOtherValue'})设置你的网址——历史会自动更新。

那么检测 url 中任何变化的最优雅的方法是使用(其中一个)两个内置事件: $locationChangeStartand $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()上述方法之一。

于 2013-11-27T22:53:20.570 回答