我有一个单页的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
。
答案 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]