没有模板的角度简单路由

时间:2013-11-27 19:19:10

标签: javascript angularjs angular-routing

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

我有服务器生成的页面,简单的谷歌地图和很少的逻辑,在3个独立的控制器中。

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

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

我在之前的项目中使用了CanJS,这绝对是简单的,但在Angular中,我无法让宝宝步骤纠正结果:)

PS:这只是最小的用例。

由于

2 个答案:

答案 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);
};

Working demo

在单独的窗口中启动实时预览,以查看窗口地址栏中的参数更改。

更新:该演示不再适用于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()即可。