更新$ route参数的最佳方法
我有几条不同的路线,但包含相似的参数。
例:
when '/user/:accountId/charts/:chartType', controller:ChartsController
when '/manager/:accountId/charts/:chartType', controller:ChartsController
when '/whatever/pathy/paththingy/charts/:chartType', controller:ChartsController
注意,所有三个视图都使用相同的图表控制器来控制视图。 它是一个相当通用的控制器,但它需要在可用的chartTypes之间切换......同时保持路线的其余部分。
示例:(这不起作用)
if my currrent url is '/user/001/charts/comparison'
Then I call something like:
$route.current.params.chartType = 'newChart';
$route.reload(); // or soemthing similar?
I want the url to become '/user/001/charts/newChart'
有没有人有任何想法如何轻松更新路线的参数,而无需完全重新输入或重建路线路径?
如果可能的话,我会建议你使用ui-router。 它在许多方面比ngRoute更强大。
从本质上讲,这个模块有一个更高层次的概念,称为状态包装底层路线,它可以屏蔽你避免直接使用路由URL等较低路由级别工作 。
比较:角度路由和角度路由器有什么区别?
使用ui-router,你可以像这样实现你的代码:
$stateProvider
.state('user.chart', {
url: '/user/:accountId/charts/:chartType',
controller: "ChartsController"
})
.state('manager.chart', {
url: '/manager/:accountId/charts/:chartType',
controller: "ChartsController"
})
.state('pathy.chart', {
url: '/whatever/pathy/paththingy/charts/:chartType',
controller: "ChartsController"
})
你可以使用这段代码在状态之间导航:
$state.go('user.chart',{chartType:'newChart'},{inherit:true});
文档
由于角1.3,您可以使用$route.updateParams(newParams)
来更改路由参数。
这是来自角度文档的报价...
$ route.updateParams(newParams);
使$route
service更新当前的URL,用newParams
指定的参数替换当前的路由参数。 提供的与路径路径段定义匹配的属性名称将插入到位置路径中,而其余属性将被视为查询参数。
缺乏这个简单的功能令我恼火,所以我实现了它并在GitHub上提交了一个PR
链接地址: http://www.djcxy.com/p/77959.html上一篇: Best way to update $route parameter
下一篇: AngularJS : How do I switch views from a controller function?