AngularJS的ui-router中是否有类似ngRoute的$routeParams功能?
ui-router全量参数获取方案
默认$stateParams仅返回当前状态、父状态URL中显式声明定义的路径参数,不会自动包含未声明的查询参数,因此会出现参数不全的问题。要实现和ngRoute的$routeParams一致的全量参数获取效果,直接使用$state服务的params属性即可。
$state.params会自动合并三类参数:
- 路由定义中显式声明的路径参数
- 全局未在路由中声明的查询参数
- 状态配置中自定义的非URL参数
代码示例
// 场景示例: // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby // 路由定义: $stateProvider.state('chapter.section', { url: '/Chapter/:chapterId/Section/:sectionId', controller: function($state, $stateParams) { // $stateParams仅返回显式声明的路径参数:{chapterId:'1', sectionId:'2'} // $state.params返回全量参数,和$routeParams效果完全一致 console.log($state.params) // 输出:{chapterId:'1', sectionId:'2', search:'moby'} } })
补充可选方案
如果需要单独处理查询参数,也可以使用$location.search()直接获取所有查询参数的键值对,再自行和路径参数合并即可。
如果使用1.x及以上版本的ui-router,在路由钩子中也可以通过$transition$.params()获取全量参数,效果和$state.params一致。
内容的提问来源于stack exchange,提问作者Jon Sud
相关产品推荐
相关产品推荐

