更新$ 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?