如何获取简单单页应用的路由参数?

时间:2014-09-06 05:24:38

标签: javascript ruby-on-rails angularjs

我有一个单页的AngularJS应用程序,它由Ruby on Rails服务器支持。路由定义仅在RESTful Rails route.rb配置中定义,例如:

http://localhost/pages/:page_id/comments/:comment_id

客户端是AngularJS,没有routeProvider配置。所以它只是一个带视图的简单AngularJS控制器。

当我在http://localhost/pages/:page_id/comments/:comment_id.html时,我想提取:page_id:comment_id的值。在AngularJS中最好的方法是什么?

注意:我不介意是否真的需要使用routeProvider。但在这种情况下我只会有一个templateUrl

1 个答案:

答案 0 :(得分:2)

$routeParams服务允许您检索当前的路由参数集。

需要安装ngRoute模块。

路线参数是$location' s search()path()的组合。 path路径匹配时会提取$route个参数。

请注意,$routeParams仅在路线更改成功完成后更新。这意味着您不能在路由解析功能中依赖$routeParams正确。相反,您可以使用$route.current.params来访问新路线的参数。

示例:

// Given:
 // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
 // Route: /Chapter/:chapterId/Section/:sectionId
 //
 // Then
 $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}

for more infor

编辑:

如果您使用angular-ui-router,则可以注入$stateParams

查看此https://github.com/angular-ui/ui-router/wiki/URL-Routing


虽然路由确实是应用程序级URL解析的一个很好的解决方案,但您可能希望使用更低级别的$location服务,如在您自己的服务或控制器中注入的那样:

var paramValue = $location.search().myParam; 

这个简单的语法适用于http://example.com/path?myParam=someValue。但是,仅当您在html5模式中配置$locationProvider之前:

$locationProvider.html5Mode(true);

否则请查看http://example.com/#!/path?myParam=someValue" Hashbang"语法有点复杂,但也有利于处理旧浏览器(非兼容html5)。 [via:Javarome]